zoukankan      html  css  js  c++  java
  • 两个队列实现一个栈

    题目描述:

      利用两个队列实现一个栈,实现先进后出的功能。

    算法实现:

     1 #include<iostream>
     2 #include<queue>
     3 using namespace std;
     4 
     5 queue<int> q1;
     6 queue<int> q2;
     7 
     8 void append(const int &data) {                            //实现栈的Push功能
     9     if(q1.size() == 0 && q2.size() == 0){                 //如果两个队列都空,则将数据push进q1.
    10         q1.push(data);
    11     }
    12     else if(q1.size() > 0){                               //如果q1非空则将数据push进q1
    13         q1.push(data);
    14     }
    15     else if(q2.size() > 0){                               //如果q2非空则将数据push进q2
    16         q2.push(data);
    17     }
    18 }
    19 
    20 int getData(){                                             //实现从栈中取数据
    21     
    22     if(q1.empty() == 1 && q2.empty() == 1){                //如果两个队列都空,则返回-1
    23         return -1;
    24     }
    25     
    26     if(q1.empty() == 1){                                    //如果q1为空,则将q2中的数据存入q1中,当q2只剩一个数据时,则输出这个数据
    27         while(q2.size() != 1){
    28             int &num = q2.front();
    29             q1.push(num);
    30             q2.pop();
    31         }
    32         int s = q2.front();
    33         q2.pop();
    34         return s;
    35     }
    36     
    37     if(q2.empty() == 1){                                    //同理如果q2为空,则将q1中的数据存入q2中,当q2只剩下一个数据时,则输出这个数据
    38         while(q1.size() != 1){
    39             int &num = q1.front();
    40             q2.push(num);
    41             q1.pop();
    42         }
    43         int s = q1.front();
    44         q1.pop();
    45         return s;
    46     }
    47 }
    48 
    49 int main(){                                                 //测试程序:输入PUSH时 再输入数字表示压栈    输入POP 时表示弹栈。如果有值就输出数据,没有则输出-1
    50     int num; 
    51     string str;
    52     int x;
    53     
    54     cin>>num;
    55     while(--num > 0){
    56         cin>> str;
    57         if(str == "PUSH"){
    58             cin>>x;
    59             append(x);
    60         }
    61         
    62         if(str == "POP"){
    63             int p = getData();
    64             if(p < 0){
    65                 cout<< "-1" << endl;
    66             }
    67             else 
    68             {
    69                 cout<<p<<endl;
    70             }
    71         }
    72     }
    73     
    74     return 0;
    75 }

    算法思想:

      我们知道两个队列实现一个栈,其中队列的机制是先进先出,栈的机制是先进后出;那么我们需要驳斥一个队列为空,如果pop数据时需要将有数据的队列的数据存入空的队列,让有数据的队列只剩一个数据就可弹出。具体可以观察代码更加明确。

  • 相关阅读:
    4-Python3从入门到实战—基础之数据类型(字符串-String)
    3-Python3从入门到实战—基础之数据类型(数字-Number)
    前端工程化—部署
    前端工程化
    PHP与MySQL设计模式:代理模式
    移动前端开发入门(一)
    PHP页面间传值的几种方法
    PHP文件上传及下载源码
    PHP文件操作
    JavaScript正则表达式
  • 原文地址:https://www.cnblogs.com/dormant/p/5316954.html
Copyright © 2011-2022 走看看