#include <iostream>
#include <stack>
#include <assert.h>
using namespace std;
template <typename T>
class StackWithMin
{
private:
stack<T> datastack;
stack<T> minstack;//存最小值而不是最小值的下标
public:
void push(const T &data)
{
datastack.push(data);
if(0==minstack.size())
minstack.push(data);
else if(minstack.top()>data)
minstack.push(data);
else
minstack.push(minstack.top());
}
void pop()
{
assert(datastack.size()>0); //删除前要判断有没有元素用于删除;
assert(minstack.size()>0); //assert如果条件还回错误终止程序;
datastack.pop();
minstack.pop();
}
int& min() //还回引用类型;
{
return minstack.top();
}
};
int main()
{
StackWithMin<int> s;
s.push(10);
s.push(7);
s.push(3);
s.push(3);
s.push(8);
s.push(5);
s.push(2);
s.push(6);
for(int i=0; i<8; i++)
{
cout<<s.min()<<endl;
s.pop();
}
}
//
//template<typename T>
//
//class StackWithMin(){
//
//private:
// stack<T>dataStack;
// stack<T>minStack;
//public:
// void push(const T &data){
//
// dataStack.push_back(data);
// if(minStack.size() == 0){
//
// minStack.push(data);
// }else if(minStack.top() > data){
//
// minStack.push(data);
// }else {
//
// minStack.push(minStack.top());
// }
// }
// void pop(){
//
// assert(minStack.size() > 0)
// assert(dataStack.size() > 0)
// dataStack.pop();
// minStack.pop();
//
// }
// T &min(){
//
// assert(minStack.size() > 0);
// assert(dataStack.size() > 0);
// return minStack.top();
// }
//};
设计包含min函数的栈(栈)
最新推荐文章于 2024-02-16 21:20:12 发布