• Implement Queue using Stacks(用栈实现队列)


    Implement the following operations of a queue using stacks.

    • push(x) -- Push element x to the back of queue.
    • pop() -- Removes the element from in front of queue.
    • peek() -- Get the front element.
    • empty() -- Return whether the queue is empty.
    Notes:
    • You must use only standard operations of a stack -- which means only push to toppeek/pop from topsize, and is empty operations are valid.
    • Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
    • You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).

    • 题目解析:
    • 用堆栈stack实现队列,仅仅能使用堆栈的操作,push(),pop()。empty().

    • 方法:
    • 用两个堆栈实现。代码例如以下:
    • class Queue {
      public:
          stack<int> st1;
          stack<int> st2;
          bool st1_use=1;  
          bool st2_use=0;  
          // Push element x to the back of queue.
          void push(int x) {
              if(st1_use==1)
              st1.push(x);
              else if(st2_use==1)
              st2.push(x);
          }
      
          // Removes the element from in front of queue.
          void pop(void) {
              if(st1.empty()&&st2.empty())  
              exit(0);
              if(st1_use==1&&st2_use==0)
              {
                  while(st1.size()>1)
                  {
                      int temp=st1.top();
                      st2.push(temp);
                      st1.pop();
                  }
                  st1.pop();
      			while(st2.size()>0)
                  {
                      int temp=st2.top();
                      st1.push(temp);
                      st2.pop();
                  }
                  st1_use==1;
                  st2_use==0;
      			return;
              }
              if(st1_use==0&&st2_use==1)
              {
                  while(st2.size()>1)
                  {
                      int temp=st2.top();
                      st1.push(temp);
                      st2.pop();
                  }
                  st2.pop();
      			while(st1.size()>0)
                  {
                      int temp=st1.top();
                      st2.push(temp);
                      st1.pop();
                  }
                  st1_use==0;
                  st2_use==1;
      			return;
              }
          }
      
          // Get the front element.
          int peek(void) {
              if(st1_use==1&&st2_use==0)
              {
      			int temp;
                  while(st1.size()>0)
                  {
                      temp=st1.top();
                      st2.push(temp);
                      st1.pop();
                  }
      			
      			while(st2.size()>0)
                  {
                      int temp1=st2.top();
                      st1.push(temp1);
                      st2.pop();
                  }
                  st1_use==1;
                  st2_use==0;
      			return temp;
              }
              if(st1_use==0&&st2_use==1)
              {
      			int temp;
                  while(st2.size()>0)
                  {
                      int temp=st2.top();
                      st1.push(temp);
                      st2.pop();
                  }
      			
      			while(st1.size()>0)
                  {
                      int temp1=st1.top();
                      st2.push(temp1);
                      st1.pop();
                  }
                  st1_use==0;
                  st2_use==1;
      			return temp;
              }
          }
      
          // Return whether the queue is empty.
          bool empty(void) {
              if(st1_use==1&&st1.empty())
              return true;
              if(st2_use==1&&st2.empty())
              return true;
              return false;
          }
      
      };


  • 相关阅读:
    pandas的简单使用
    java搭建web从0-1(第一步:创建web工程)
    android通过命令行安装sdk
    iOS8不能通过itms-services协议下载安装app
    date命令转换日期命令提示date: illegal time format
    mac通过命令行获取证书和配置文件过期时间
    jenkin 不必要的Execute shell执行失败,导致jenkins都失败的解决
    命令行执行jenkins,构建job(可传递参数)
    Eclipse启动分析。。
    java非web应用修改 properties/xml配置文件后,无需重启应用即可生效---自动加载
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6803119.html
Copyright © 2020-2023  润新知