设计一个有getMin()功能的栈C++代码实现
【题目】
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
【要求】
1、pop、push、getMin操作的时间复杂度都是O(1);
2、设计的栈类型可以使用现成的栈结构。
using namespace std;
#include<stack>
class MyStack1
{
public:
stack<int>dataStack;//这两个地方成员变量没必要暴露给外界,应该设为:privat
stack<int>minStack;//这两个地方成员变量没必要暴露给外界,应该设为:privat
void push(int num)
{
if (minStack.empty())
{
minStack.push(num);
}
else if (minStack.top() >= num)//自己已经封装了函数,应该为:getMin() >= num
{
minStack.push(num);
}
dataStack.push(num);
}
int pop()
{
int top;
if (!dataStack.empty())
{
top = dataStack.top();
dataStack.pop();
if (top == minStack.top())
{
minStack.pop();
}
return top;
}
}
int getMin()
{
if (!minStack.empty())
{
return minStack.top();
}
}
};
class MyStack2
{
private:
stack<int>dataStack;
stack<int>minStack;
public:
void push(int num)
{
dataStack.push(num);
if (minStack.empty())
{
minStack.push(num);
}
else if (getMin() >= num)
{
minStack.push(num);
}
else
{
minStack.push(getMin());
}
}
int pop()
{
if (!dataStack.empty())
{
int value = dataStack.top();
dataStack.pop();//这里忘记弹出minStack,应在return之前加入:minStack.pop();
return value;
}
}
int getMin()
{
return minStack.top();
}
};
新手程序员一枚,从今天开始正式写博客了,记录一下,这道题目是左程云大神的《程序员面试指南》的第一道题目,书中使用java实现,我在这里用C++实现,并且对比了书中的源码,及时发现自己在写代码中的不足和问题。加油!!!