//How would you design a stack which, in addition to push and pop, also has a function min which returns the minimum element? Push, pop and min should all operate in O(1) time.

//使用一个链表来记录最小值的index
#include <iostream>
using namespace std;
#define MAXSIZE 100
#define INIT -888888 class mStack
{
public:
mStack()
{
top = -1;
mi = new min;
mi->data = 0;
mi->nextMin = NULL;
for (int i =0 ;i<100; i++)
{
data[i] = INIT;
}
} int pop()
{
if (top > -1)
{
if (top == mi->data)
{
min *t = mi;
mi = mi->nextMin;
delete t;
} int c= data[top];
data [top] = INIT;
top --;
return c;
}
else
return -2;
} bool push(int e)
{
if (top<MAXSIZE-1)
{
top++;
data[top] = e; if (data[mi->data] > data[top] && data[top]!= INIT)
{
min *t = new min;
t->data = top;
t->nextMin = mi;
mi = t;
}
return true;
}
else
{
return false;
}
} int getmin()
{
return data[mi->data];
} private:
int data[MAXSIZE];
int top; struct min
{
int data;
min *nextMin;
};
min *mi; }; int main()
{
mStack s; for (int i=0;i<10;i++)
{
s.push(10-i);
} s.pop();
s.pop();
cout<<s.getmin()<<endl;
return 0;
}

最新文章

  1. Leetcode 234 Palindrome Linked List 链表
  2. JQM[jquery mobile] 实战经验汇总
  3. Android开发规范——命名 (转)
  4. 当一回Android Studio 2.0的小白鼠
  5. Redis高级实践之————Redis短连接性能优化
  6. ZOJ-3349 Special Subsequence 线段树优化DP
  7. UNDO表空间设置
  8. cron服务 ubuntu
  9. Curl之Post Json
  10. oracle学习----行级锁的理解
  11. Linux iostat监测IO状态(转)
  12. Android使用xml中定义的动画效果
  13. Lucene 实例教程(二)
  14. android Graphics(二):路径及文字
  15. WP自定义字体
  16. ROS探索总结(十九)——如何配置机器人的导航功能
  17. Python Web(Django)与SQL SERVER的连接处理
  18. &lt;20190103&gt;别傻了,一些 新的技术注定只适合新人
  19. SectionList的使用
  20. hdu3377

热门文章

  1. spring cloud: zuul(五): prefix访问前缀, ignoredServices粗粒度访问, yml不起作用
  2. c# zfc
  3. 雷林鹏分享:C# 循环
  4. maven----&gt;配置,指令,插件,使用
  5. centOS 6.5安装python和nginx
  6. apiCloud 三方分享,微信好友分享,微信朋友圈分享,QQ分享,微博分享
  7. php 路途一点启示
  8. python记录_day09 初识函数
  9. linux下对数据库操作
  10. 『TensorFlow』SSD源码学习_其五:TFR数据读取&amp;数据预处理