• 使用双栈实现一个队列


    在往上看到这样的题目:

    大体的有如下几个思路:

      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 }
  • 相关阅读:
    对我最重要的三个老师
    究竟 javascript 错误处理有哪些类型?
    前端小白凭什么杀进 BAT?
    金九银十,换工作热潮来临!
    适用于Java开发人员的SOLID设计原则简介
    在5分钟内将Spring Boot作为Windows服务启动
    Redis中的Java分布式缓存
    Arrays工具类详解
    SpringBoot整合redis
    java 数组用法详解
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4900987.html
Copyright © 2020-2023  润新知