/*
empty() 堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素
*/
#include <iostream>
#include <stack>
using namespace std;
class StackMin {
public:
void push(int value);
void pop();
int min();
int top();
private:
stack<int> realStack;
stack<int> minStack;
};
void StackMin::push(int value)
{
int currMin = 0;
if (!minStack.empty())
{
currMin = minStack.top();
}
else
{
currMin = INT_MAX;
}
if (value < currMin)
{
minStack.push(value);
}
else
{
minStack.push(minStack.top());
}
realStack.push(value);
}
void StackMin::pop()
{
if (realStack.empty() || minStack.empty())
{
cout << "stack empty!" << endl;
return;
}
realStack.pop();
minStack.pop();
}
int StackMin::min()
{
if (realStack.empty() || minStack.empty())
{
cout << "stack empty!" << endl;
return INT_MAX;
}
return minStack.top();
}
int StackMin::top()
{
if (realStack.empty() || minStack.empty())
{
cout << "stack empty!" << endl;
return -1;
}
return realStack.top();
}
int main()
{
StackMin stk;
for (int i = 0; i < 10; i++)
{
int value = rand() % 150;
cout << "Pushing : " << value << endl;
stk.push(value);
}
cout << "Push 10 Elements and current min is : " << stk.min() << endl << endl;
for (int i = 0; i < 5; i++)
{
int value = stk.top();
cout << "poping : " << value << endl;
stk.pop();
}
cout << "After pop 5 Elements, current min is : " << stk.min() << endl;
return 0;
}
Stack 类
最新推荐文章于 2019-11-21 02:04:10 发布