• [剑指offer]09用两个栈实现队列插入和删除操作,C++实现


    原创博文,转载请注明出处!

    # 本文为牛客网《剑指offer》刷题笔记

    1.题目

    # 用两个栈实现队列的插入和删除操作

    2.思路

            栈服从先入后出的原则处理数据,队列服从先入先出的原则处理数据。使用两个”先入后出“的栈实现的“先入先出”的队列。

            举例分析两个栈模拟队列插入和删除的过程:

    • 插入操作--元素a插入到stack1,此时stack1中的元素有{a},stack2为空。再压入b和c到stack1,此时stack1的元素有{a,b,c},其中c位于栈顶,而stack2仍然是空的。
    • 删除操作--按照先入先出的规则,由于a比b、c先插入队列中,最先删除的元素应该是a。元素a存储在stack1中,但并不在栈顶,因此不能直接进行删除操作。如果我们把stack1中的元素逐个弹出压入stack2,元素在stack2中的顺序正好和原来在stack1中的顺序相反。因此经过3次弹出stack1和要入stack2操作之后,stack1为空,而stack2中的元素是{c,b,a},这个时候就可以弹出stack2的栈顶a了。此时的stack1为空,而stack2的元素为{b,a},其中b在栈顶。当stack2中不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出。如果stack2为空时,我们把stack1中的元素逐个弹出并压入stack2。由于先进入队列的元素被压倒stack1的栈底,经过弹出和压入之后就处于stack2的栈顶,又可以直接弹出。如果有新元素d插入,我们直接把它压入stack1即可。

    总结:用插入元素到栈stack1来模拟队列插入操作;用删除栈stack2的栈顶元素来模拟队列删除操作。

                                                                                    剑指Offer(五):用两个栈实现队列

    3.code

    # 预备知识

        C++STL中的stack,成员函数top是返回栈顶元素,成员函数pop是删除栈顶元素。

      1 class Solution
      2 {
      3 public:
      4     // 两个栈模拟对列插入
      5     void push(int node) {
      6         stack1.push(node);
      7     }
      8     // 两个栈模拟对列删除
      9     int pop() {
     10 
     11         // stack2相关
     12         if(stack2.empty()){
     13             while(stack1.size()>0)
     14             {
     15                 int data = stack1.top();
     16                 stack2.push(data);
     17                 stack1.pop();
     18             }
     19         }
     20 
     21         int temp = stack2.top();
     22         stack2.pop();
     23         return temp;
     24     }
     25 
     26 private:
     27     stack<int> stack1;
     28     stack<int> stack2;
     29 };
    View Code
  • 相关阅读:
    判断 undefined and ( == null) and (!something) and ( == null)
    textarea高度自适应自动展开
    退出 js和Jquery区别
    javascript高级程序设计 学习笔记 第五章 下
    Bind, Call and Apply in JavaScript
    javascript高级程序设计 学习笔记 第五章 上
    小程序入门---登录流程
    Array类型 JS
    深入浅出妙用 Javascript 中 apply、call、bind
    微信公众号开发(与angular框架相结合)
  • 原文地址:https://www.cnblogs.com/wanglei5205/p/8507212.html
Copyright © 2020-2023  润新知