学习目标
了解栈的后进先出的原则
过程
1,使用栈来模拟队列,应为栈是先进先出,队列是先进后出,所以需要用2个堆栈,一个栈保存压入的的数据,读出用另一个栈,吧最后的数据放到读出这个栈的开头。
class MyQueue {
private:
stack<int> inStack, outStack;
void in2out() {
while (!inStack.empty()) {
outStack.push(inStack.top());
inStack.pop();
}
}
public:
MyQueue() {}
void push(int x) {
inStack.push(x); //压栈
}
int pop() {
if (outStack.empty()) {
in2out(); //写入的栈放到读出的栈中
}
int x = outStack.top();
outStack.pop();
return x;
}
int peek() {
if (outStack.empty()) {
in2out();
}
return outStack.top();
}
bool empty() {
return inStack.empty() && outStack.empty();
}
};
- 225. 用队列实现栈
需要注意的最后插入的要放到最前面即可。
class MyStack {
public:
queue<int> queue1;
queue<int> queue2;
MyStack() {
}
void push(int x) {
int size;
if(queue1.empty()){
queue1.push(x);
size=queue2.size();
for(int i=0;i<size;i++){
queue1.push(queue2.front());
queue2.pop();
}
}
else{
queue2.push(x);
size=queue1.size();
for(int i=0;i<size;i++){
queue2.push(queue1.front());
queue1.pop();
}
}
}
int pop() {
//queue 的pop 的移除队头第一个元素
int value;
if(queue1.empty()&&(queue2.empty())){
value=0;
}
else if(queue1.empty()){
value=queue2.front();
queue2.pop();
}
else{
value=queue1.front();
queue1.pop();
}
return value;
}
int top() {
int value;
if(queue1.empty()&&(queue2.empty())){
value=0;
}
else if(queue1.empty()){
value=queue2.front();
}
else{
value=queue1.front();
}
return value;
}
bool empty() {
if(queue1.empty()&&(queue2.empty())){
return true;
}
else{
return false;
}
}
};
结论
这2到题目不难,关键掌握队列和栈的思维方式。