仅仅是演示实现。不考虑栈使用的数据结构是vector 还是其它容器。

代码例如以下

#include <iostream>
#include <vector> using namespace std; template <class T>
class minMaxStack
{
public:
minMaxStack()
{
DataStack = new vector<T>;
minStack = new vector<int>;
maxStack = new vector<int>;
}
~minMaxStack()
{
delete DataStack;
delete minStack;
delete maxStack;
}
bool isEmpty()
{
return DataStack->size() == 0;
}
void push(T data)
{ if (isEmpty())
{
DataStack->push_back(data);
minStack->push_back(0);
maxStack->push_back(0);
}
else
{
DataStack->push_back(data);
int minIndex = *(minStack->end()-1);
int maxIndex = *(maxStack->end()-1);
int min = *(DataStack->begin() + minIndex);
int max = *(DataStack->begin() + maxIndex);
if (min > data)
{
minStack->push_back(DataStack->size() - 1);
}
else
{
minStack->push_back(minIndex);
}
if (max > data)
{
maxStack->push_back(maxIndex);
}
else
{
maxStack->push_back(DataStack->size() - 1);
}
}
} T getTop()
{
return *(DataStack->end()-1);
}
void pop()
{
if (isEmpty())
{
return;
}
minStack->erase(minStack->end()-1);
maxStack->erase(maxStack->end()-1);
DataStack->erase(DataStack->end()-1);
}
T max()
{
return *(DataStack->begin() + (*(maxStack->end()-1)));
}
T min()
{
return *(DataStack->begin() + (*(minStack->end()-1)));
}
void printStack()
{
cout << "栈顶:" << getTop() << endl;
cout << "最小:" << min() << endl;
cout << "最大:" << max() << endl;
cout << "\n\n";
}
private:
vector<T> * DataStack;
vector<int> * minStack;
vector<int> * maxStack;
}; void main()
{
minMaxStack<int> st;
st.push(6);
st.printStack();
st.push(17);
st.printStack();
st.push(7);
st.printStack();
st.push(3);
st.printStack();
st.pop();
st.printStack();
st.pop();
st.printStack();
st.pop();
st.printStack();
cin.get();
}

实现O(1)时间复杂度带有min和max 函数的栈的更多相关文章

  1. Oracle的dbms_random.value(min,max)函数包括边界值吗?数据是如何分布的?

    事先申明下,我的DB环境是Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production,不保证在其它版本下也 ...

  2. Visual C++中min()和max()函数的使用

    标准库在<algorithm>头中定义了两个模板函数std::min() 和 std::max().通常用它可以计算某个值对的最小值和最大值. 可惜在 Visual C++ 无法使用它们, ...

  3. SAS学习笔记6 算数语句(sum、mean、min、max函数)

    sum:求和 mean:平均值 min:最小值 max:最大值

  4. mysql中min和max查询优化

    mysql max() 函数的需扫描where条件过滤后的所有行: 在测试环境中重现: 测试版本:Server version:         5.1.58-log MySQL Community ...

  5. 面试题19:包含min函数的栈

    CStack.h: #pragma once class CStackElement { public: CStackElement(void){} CStackElement(int data, i ...

  6. 三、函数 (SUM、MIN、MAX、COUNT、AVG)

    第八章 使用数据处理函数 8.1 函数 SQL支持利用函数来处理数据.函数一般是在数据上执行的,给数据的转换和处理提供了方便. 每一个DBMS都有特定的函数.只有少数几个函数被所有主要的DBMS等同的 ...

  7. oracle max()函数和min()函数

    当需要了解一列中的最大值时,可以使用MAX()函数:同样,当需要了解一列中的最小值时,可以使用MIN()函数.语法如下. SELECT          MAX (column_name) / MIN ...

  8. Linq查询Count、Sum、Min、Max、Average

    原文地址:Linq——Count.Sum.Min.Max.Average作者:mousekitty Linq查询之Count.Sum.Min.Max.Average using System; usi ...

  9. Min and Max

    Min and Max 需要处理不同数据类型; 另外*args, 表示的是位置参数, *kwargs表示的是key参数, args的类型为tuple类型, 参数为min(3, 2)时, args为(3 ...

随机推荐

  1. ios开发相关网站

    1.苹果开发者中心(ios Dev Center):最权威的学习ios开发的地方,提供ios开发所能用到的所有内容(包含文档.指南以及实例代码). https://developer.apple.co ...

  2. CentOS 6.5 IP 设置

    DEVICE=eth0TYPE=EthernetUUID=7d6d54e0-054d-472b-8cc1-080f16ef36c1ONBOOT=yesNM_CONTROLLED=yesBOOTPROT ...

  3. [Winfrom] 捕获窗体最大化、最小化和关闭按钮的事件

    const int WM_SYSCOMMAND = 0x112;const int SC_CLOSE = 0xF060;const int SC_MINIMIZE = 0xF020;const int ...

  4. [Android1.5]TextView跑马灯效果

    from: http://www.cnblogs.com/over140/archive/2010/08/20/1804770.html 前言 这个效果在两周前搜索过,网上倒是有转载,可恨的是转载之后 ...

  5. openerp 报表字段 report_rml_content_data

    按需求修改一个报表,本想按照打印出来的报表内容搜索rml文件,找到需要修改的rml问加. 但是发现搜索不到,后来查询报表动作,确认对应的rml文件中,没有发现 “报表中” 的字串. 猜测可能是rml直 ...

  6. utf8_general utf8_general utf8_bin区别

    对与general来说 ß = s 是为true的 但是对于unicode来说 ß = ss 才是为true的, 其实他们的差别主要在德语和法语上,所以对于我们中国人来说,一般使用general,因为 ...

  7. CodeForces 554B(扫房间)

      CodeForces 554B Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u ...

  8. 写个自己的Xcode4插件(二)

    补充上一篇: 一.在XCode5里面,要在info.plist里面再加入以下两个字段: 1. 内容要保持一致喔,别问我为什么,我也不知道,是参考其他许多插件发现的,那些插件都用了这个字段,而且内容一样 ...

  9. hadoop 生态系统版本对应问题

    http://hbase.apache.org/book.html 这是hortonworks的哦哦哦哦哦哦哦哦哦哦哦哦 Hadoop 2.x is better than Hadoop 1.x Ha ...

  10. java 垃圾回收机制 引用类型

    Java语言的一个重要特性是引入了自动的内存管理机制,使得开发人员不用自己来管理应用中的内存.C/C++开发人员需要通过malloc/free 和new/delete等函数来显式的分配和释放内存.这对 ...