您的位置:首页 > 职场人生

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

2017-06-27 09:35 225 查看
题目:定义栈的数据结构,在该类型中实现一个能够得到栈的最小元素的min函数,调用min、push以及pop的时间复杂度都是O(1).

代码示例:

#include<iostream>
using namespace std;
# define MaxSize 20
class 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: