仅仅是演示实现。不考虑栈使用的数据结构是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. 【深度解析】Google第二代深度学习引擎TensorFlow开源

    作者:王嘉俊 王婉婷 TensorFlow 是 Google 第二代深度学习系统,今天宣布完全开源.TensorFlow 是一种编写机器学习算法的界面,也可以编译执行机器学习算法的代码.使用 Tens ...

  2. 【Linux】常用命令

    一.文件结构     /:       根目录 /bin:    系统所需要的那些命令位于此目录. /boot:   Linux的内核及引导系统程序所需要的文件目录,GRUB或LILO系统引导管理器也 ...

  3. [ZHUAN]Flask学习记录之Flask-SQLAlchemy

    From: http://www.cnblogs.com/agmcs/p/4445583.html 各种查询方式:http://www.360doc.com/content/12/0608/11/93 ...

  4. Python Tutorial 学习(九)--Classes

    ## 9. Classes 类 Compared with other programming languages, Python's class mechanism adds classes wit ...

  5. linux直接启动到字符界面或从字符界面启动到图形化界面

    修改/etc/inittab文件 将内容为:"id:5:initdefault"的行的数字5改为3,保存重启即可直接进入字符界面 PS:3和5分别表示运行级别 从字符界面启动到图形 ...

  6. 如何使用SplitContainer控件[转]

    原文地址:http://yinzhihua2008.blog.163.com/blog/static/794306720120511150457/ 在Windows资源管理器中,当把鼠标指针移动到Tr ...

  7. BZOJ 1052 覆盖问题

    Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定用3个L*L的正方形塑料薄膜将小 ...

  8. cf D. On Sum of Fractions

    http://codeforces.com/problemset/problem/397/D 题意:v(n) 表示小于等于n的最大素数,u(n)表示比n的大的第一个素数,然后求出: 思路:把分数拆分成 ...

  9. C# yield return 用法与解析

    原文:C# yield return 用法与解析 C# yield return 用法与解析 本文参考自:http://www.jb51.net/article/54810.htm 当初没有认真理解 ...

  10. Android Wear开发 - 数据通讯 - 第三节 : 事件处理

    http://developer.android.com/training/wearables/data-layer/events.html 以下是本人在学习官方开发文档时的笔记,主要是翻译为主,并在 ...