题目
实现一个特殊的栈, 在实现栈的基本功能的基础上, 再实现返
回栈中最小元素的操作。
【要求】
1. pop、 push、 getMin操作的时间复杂度都是O(1)。
2. 设计的栈类型可以使用现成的栈结构。
分析
先放着,过后整理
代码
// 获得栈中最小值操作.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<stack>
using namespace std;
class Stack
{
public:
int getmin();
void push(int element);
int pop();
int size();
int top();
private:
stack<int>data;
stack<int>min;
};
int Stack::getmin()
{
if (min.empty())
return -1;
else
return min.top();
}
void Stack::push(int element)
{
if (min.empty())
min.push(element);
else if (element < min.top())
min.push(element);
else
{
int num1 = min.top();
min.push(num1);
}
data.push(element);
}
int Stack::pop()
{
if (data.empty())
return -1;
else
min.pop();
int number = data.top();
data.pop();
return number;
}
int Stack::size()
{
return data.size();
}
int Stack::top()
{
return data.top();
}
int main()
{
Stack stack1;
stack1.push(1);
stack1.push(2);
stack1.push(3);
stack1.push(4);
stack1.push(15);
for (int i = 0; i <5; i++)
{
cout << " pop " << stack1.pop() << endl;
cout << " min " << stack1.getmin() << endl;
cout << " top " << stack1.top() << endl;
}
}