zoukankan      html  css  js  c++  java
  • 剑指offer【面试题07:用两个栈实现队列】

    //题目描述
    //用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    思路:必须知道,stack<> 是先进后出的,queue<>是先进先出的; 所以按照题目要求,例如:我们按次序将1、2、3、4、5分别push进stack中,我们希望得到如图:

    这样就达到了题目要求:先进先出。但是现在问题是一个stack无法满足如图需求。我们考虑将1234已经压入stack1,并且满足”先进先出”。现在准备加入5;流程如下图:

     1 //题目描述
     2 //用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
     3 #include<iostream>
     4 #include<stack>
     5 
     6 using namespace std;
     7 
     8 stack<int> stack1;
     9 stack<int> stack2;
    10 // |------------
    11 // | 2 3 1 3 5 0
    12 // |------------
    13 void push(int node)
    14 {
    15     //<1> 将stack1的元素备份到 stack2
    16     const int stack1_size = stack1.size(); 
    17     for (int i = 0; i < stack1_size; i++)
    18     {
    19         int temp = stack1.top();
    20         stack1.pop();
    21         stack2.push(temp);
    22     }
    23     stack1.push(node); // push 操作
    24     // <2> 从stack2恢复元素
    25     const int stack2_size = stack2.size();
    26     for (int m = 0; m < stack2_size; m++)
    27     {
    28         int temp = stack2.top();
    29         stack2.pop();//这里顺便把stack2清空了
    30         stack1.push(temp);
    31     }
    32 }
    33 
    34 int pop() {
    35     int temp = stack1.top();
    36     stack1.pop();
    37     return temp;
    38 }
    39 
    40 int main()
    41 {
    42     push(1);
    43     push(2);
    44     push(3);
    45     push(4);
    46     push(5);
    47 
    48     cout << pop() << endl; //1
    49     cout << pop() << endl; //2
    50     cout << pop() << endl; //3
    51     cout << pop() << endl; //4
    52     cout << pop() << endl; //5
    53     return 1;
    54 }
  • 相关阅读:
    XSS--PHPwind5.3复现
    网络基础一
    不老的神器--namp,awvs
    苏醒的巨人----CSRF
    XSS--编码绕过,qcms,鲶鱼cms
    XSS----payload,绕过,xss小游戏记录
    sql注入--高权限,load_file读写文件
    提权基础-----mysql-udf提权
    weblogic AND jboss 反序列化漏洞
    简单的压力测试工具 siege
  • 原文地址:https://www.cnblogs.com/winslam/p/9473797.html
Copyright © 2011-2022 走看看