面试题目21—包含min函数的栈

来源:互联网 发布:秒杀java实现代码 编辑:程序博客网 时间:2024/06/05 20:20
题目:定义栈的数据结构,在该类型中实现一个能够得到栈的最小元素的min函数,调用min、push以及pop的时间复杂度都是O(1).

代码示例:

#include<iostream>using namespace std;# define MaxSize 20class MyStack{int data[MaxSize];int m_data[MaxSize];int length;public:MyStack(){length = -1;}~MyStack(){}void push(int n);void pop(int &n);int min(void);};void MyStack::push(int n){if (length == -1){length++;data[length] = n;m_data[length] = n;return ;}//length++;data[length] = n;if (m_data[length - 1] > n){m_data[length] = n;}else{m_data[length] = m_data[length-1];}}void MyStack::pop(int &n){if (length == -1){n = -1;return;}n = data[length];length--;//}int MyStack::min(void){if (length != -1){return m_data[length];}else{return -1;}}void main(){MyStack mystack;mystack.push(6);mystack.push(0);mystack.push(1);mystack.push(8);mystack.push(9);mystack.push(3);cout << "最小值:" << mystack.min() << endl << endl;int n;//mystack.pop(n);cout << "栈顶元素" << n << "出栈:" << n;cout << "最小值:" << mystack.min() << endl<<endl;//mystack.pop(n);cout << "栈顶元素" << n << "出栈:" << n;cout << "最小值:" << mystack.min() << endl << endl;//mystack.pop(n);cout << "栈顶元素" << n << "出栈:" << n;cout << "最小值:" << mystack.min() << endl << endl;//mystack.pop(n);cout << "栈顶元素" << n << "出栈:" << n;cout << "最小值:" << mystack.min() << endl << endl;//mystack.pop(n);cout << "栈顶元素" << n << "出栈:" << n;cout << "最小值:" << mystack.min() << endl << endl;//mystack.pop(n);cout << "栈顶元素" << n << "出栈:" << n;cout << "最小值:" << mystack.min() << endl << endl;}