题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
栈的思想是先进后出,队列的思想是先进先出。
这里我想回忆一下栈的结构。(惹 怎么引用不过来 = =)
了解怎么入栈出栈之后,可以详细了解一下。
- 每次入栈时,先new一个新结点,将data赋值,将next指向栈当前的top。
LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));
s->data = e;
s->next = S->top;
S->top = s; /*将新的节点s赋值给栈顶指针*/
S->count++;
return OK;
- 每次出栈时,先记录栈当前的top,之后再将top指向top->next,之后再释放记录。
/*若栈不为空,则删除S的栈顶元素,用e返回其值*/
Status Pop(LinkStatck *S, SElemType *e)
{
LinkStackPtr p;
if (S->count == 0)
{
return ERROR;
}
*e = S->top->data;
p = S->top; /*将栈顶节点赋值给p*/
S->top = S->top->next; /*使栈顶指针下移一位,指向后一节点*/
free(p); /*释放节点p*/
S->count--;
return OK;
}
题目实现代码:
#include "iostream"
using namespace std;
class Solution
{
public:
void push(int node)
{
stack1.push(node);
}
int pop()
{
if(stack2.empty())
{
while(!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
}
int p = stack2.top();
stack2.pop();
return p;
}
private:
stack<int> stack1;
stack<int> stack2;
};