用两个栈实现队列(C++)

题目描述:用两个栈来实现一个队列,完成队列的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 stack1;
    stack stack2;
};

你可能感兴趣的:(用两个栈实现队列(C++))