zoukankan      html  css  js  c++  java
  • 使用双栈实现一个队列

    在往上看到这样的题目:

    大体的有如下几个思路:

      1 一个栈维护队列的内容,当入队列的操作的时候就直接入s1栈,当出队列的时候就现将s1栈底以外的内容都push到s2中保存起来,将s1栈底返回后将s2内容在弹回来。

      2 s1作为压栈之用,s2作为出栈之用。入队列的时候就直接检查s1中有无对象,没有检查s2,如果s2中有对象就将s2中值全部弹回s1,再将新的对象入栈。

      3 最后一种与上面相同,不过栈的作用发生了改变。

    这里就简单列出第二种的实现: (同理的,双队列实现栈也可以类似的实现,且方法也是类似的)

     1 class Stack{
     2 //...
     3 void push(int );
     4 int pop();
     5 int count();
     6 //...
     7 };
     8 
     9 class Queue{
    10 public:
    11     void enqueue(int );
    12     int dequeue();
    13     int count() const;
    14 private:
    15     Stack s1;
    16     Stack s2;
    17 };
    18 
    19 //1为入栈用,2作为出栈用
    20 void Queue::enqueue(int obj)
    21 {
    22     if(s1.count() == 0 && s2.count() != 0){
    23         while(s2.count() != 0){
    24             s1.push(s2.pop());
    25         }
    26         s1.push(obj);
    27     }else{
    28         s1.push(obj);
    29     }
    30 }
    31 
    32 int Queue::dequeue()
    33 {
    34     if(s2.count() == 0 && s1.count() != 0){
    35         while(s1.count() != 0){
    36             s2.push(s1.pop());
    37         }
    38         return s2.pop();
    39     }else{
    40         if(s2.count() != 0)
    41             return s2.pop();
    42     }
    43 }
  • 相关阅读:
    Day-11 闭包和迭代器
    Day-01 Python基础
    Day-10 函数的进阶
    Day-09 初识函数
    Day-08 文件操作
    Day-07 基础数据类型补充 set集合 深浅拷贝
    Day-06 小数据池 再谈编码
    Day-05 基础数据类型字典dict
    Day-04 基础数据类型list, tuple
    NodeJs获取两个日期间的所有日期
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4900987.html
Copyright © 2011-2022 走看看