带min()函数的栈的实现

本文参考了网上有名的帖子微软等公司数据结构+算法面试100题系列

//c++编写 //多加一个辅助栈,栈顶为当前最小值,入栈时,比较入栈数据与辅助栈的栈顶元素的大小,要是<=辅助栈栈顶元//素,则数据入栈后,也加入辅助栈。也正因为如此,主栈栈顶元素总是大于等于辅助栈的栈顶元素,出栈时,比//较栈顶元素与辅助栈的元素,相等时就都出栈,要不只有主栈出栈。 //其中有一个困扰我的问题是,要是栈空了,再pop时,怎样返回出错信息?怎么知道是出错信息还是出栈的元素//呢? #include<iostream> using namespace std; #define MAXLENGTH 10 class minStack { int* pStackArray; //主栈 int* pMinStack; // 辅助栈 int sTop,mTop; //主栈栈顶与辅助栈栈顶 //构造函数,初始化数据 public: minStack() { pStackArray = new int[MAXLENGTH]; pMinStack = new int[MAXLENGTH]; sTop = mTop = -1; } //忘了写析构函数,要有人看着篇文章,就自己写一个吧。 bool isEmpty(){ if(-1 == sTop) return true; else return false; } bool isFull(){ if(MAXLENGTH - 1 == sTop) return true; else return false; } void push(int n){ if(!isFull()) { pStackArray[++sTop] = n; if(isEmpty()) pMinStack[++mTop] = n; else if(n <= pMinStack[mTop]) pMinStack[++mTop] = n; } } int pop(){ if(!isEmpty()){ if(pStackArray[sTop] == pMinStack[mTop]) mTop--; sTop--; return pStackArray[sTop+1]; } } int getTop(){ if(!isEmpty()) return pStackArray[sTop]; } int getMin(){ if(!isEmpty()) return pMinStack[mTop]; } }; //main元素是我自己随便写的,写的很烂,自己可以写好一点,好好测试一下这个类有什么问题,麻烦也给我说 //一声。 int main() { minStack minstack; minstack.push(1); minstack.push(2); minstack.push(0); minstack.push(3); int i = 4; while(i > 0){ cout << minstack.pop() << " "; cout << minstack.getMin() << endl; i--; } return 0; }

转载于:https://www.cnblogs.com/ConfuciusPei/archive/2011/06/24/5118428.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值