美文网首页
用两个栈实现队列(C++)

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

作者: 我的天气很好啦 | 来源:发表于2018-08-30 01:46 被阅读0次

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

    相关文章

      网友评论

          本文标题:用两个栈实现队列(C++)

          本文链接:https://www.haomeiwen.com/subject/qqilwftx.html