仅仅是演示实现。不考虑栈使用的数据结构是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. Linux中的find指令

    find find是最常见和最强大的查找命令,在磁盘中查找文件,用它找到任何你想找的文件,就是速度有点慢. find    path    -option    [    -print ]    [ ...

  2. python中的几种集成分类器

    from sklearn import ensemble 集成分类器(ensemble): 1.bagging(ensemble.bagging.BaggingClassifier) 对随机选取的子样 ...

  3. SGU 183.Painting the balls

    时间限制:0.25s 空间限制:4M 题意:  在n(n<=10000)个球中,给若干个球涂色,每个球涂色的代价为Ci,使得任意连续m(m<=100)个球中有至少两个球被涂了色. Solu ...

  4. CSS实现图片在div a标签中水平垂直居中

    CSS实现图片在div a标签中水平垂直居中 <div class="demo"> <a href="#"> <img src=& ...

  5. 常用jQuery选择器总结【转】

    在Dom 编程中我们只能使用有限的函数根据id 或者TagName 获取Dom 对象. 然而在jQuery 中则完全不同,jQuery 提供了异常强大的选择器用来帮助我们获取页面上的对象, 并且将对象 ...

  6. python中归并排序

    # coding=UTF-8 #!/usr/bin/python import sys def merge(nums, first, middle, last): "merge" ...

  7. action 关联

    <act_window context="{'product_id': active_id}" id="act_stock_product_location_ope ...

  8. JQuery重要知识点

    jQuery基本选择器----包括ID选择器,标签选择器,类选择器,通配选择器和组选择器5种 a. ID选择器: $("#id") b. 标签选择器:$("element ...

  9. Ferry Loading||

    uva10440:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&am ...

  10. Gnome Tetravex

    zoj1008:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1008 题目意思是有一个游戏,即给出一个图,该图是由n*n个 ...