• 由两个栈组成的队列(C++实现)


    代码:

    #include <iostream>
    #include <stack>
    # include <string>
    #include <stdexcept>
    using namespace std;
    class My_Queue
    {
    public:
      My_Queue(){};
      ~My_Queue(){};
      int add(int var);
      int poll();
      int peek();
      bool empty();
      bool s_push_empty();
      int stackPush_pop();
    private:
      stack<int> stackPush;
      stack<int> stackPop;
    };
    //实现代码
    int My_Queue::add(int var)
    {
      stackPush.push(var);
      return 0;
    }
    int My_Queue::poll()
    {
      if(stackPush.empty()&&stackPop.empty()){
            throw runtime_error("Empty Queue !");
          }
      else{
        while(!stackPush.empty()){
          int top_val = stackPush.top();
          stackPush.pop();
          stackPop.push(top_val);
        }
      }
      int top_value = stackPop.top();//返回stackPop栈顶元素的引用
      stackPop.pop();//弹出stackPop栈顶元素
      return top_value;
      }
    int My_Queue::peek()
    {
      if(stackPush.empty()&&stackPop.empty()){
            throw runtime_error("Empty Queue !");
          }
      else{
        while(!stackPush.empty()){
          int top_val = stackPush.top();
          stackPush.pop();
          stackPop.push(top_val);
        }
      }
      int top_value = stackPop.top();
      return top_value;
    }
    bool My_Queue::empty()
    {
      if(stackPush.empty()&&stackPop.empty())
           return true;
      else
          return false;
    }
    int My_Queue::stackPush_pop()//stackPush弹出
    {
      if(!stackPush.empty()){
          int _top_var = stackPush.top();
          std::cout << _top_var << ' ';
          stackPush.pop();
      }
    }
    bool My_Queue::s_push_empty()//判断stackPush为空?
    {
      if(stackPush.empty())
           return true;
      else
           return false;
    }
    //测试代码
    int main()
    {
      My_Queue myqueue;
      int a[] = {1,3,2,2,1,5};
      for(int i=0;i<6;i++)
      {
        myqueue.add(a[i]);
      }
      std::cout << "this is stackpush_data:" << ' ';
      while (!myqueue.s_push_empty()) {
        myqueue.stackPush_pop();//弹出stackPush中所有元素
      }
      for(int i=0;i<6;i++)
      {
        myqueue.add(a[i]);
      }
      std::cout << "this is queue stackPop_data(from_peek_function):" << myqueue.peek() << ' ';//弹出stackPop栈顶元素
      std::cout <<  ' ';
      std::cout << "this is queue stackPop_data(from_poll_function):" << ' ';
      while(!myqueue.empty())
      {
        std::cout << myqueue.poll() << ' ';//弹出stackPop所有元素
      }
     
      return 0;
     
    }
     
    测试结果:
     
  • 相关阅读:
    Codeforces Round #536 E. Lunar New Year and Red Envelopes /// 贪心 记忆化搜索 multiset取最大项
    牛客网暑期ACM多校训练营(第五场) F
    关于线段树or 树状树状 在二维平面搞事情!Orz
    ZOJ 3822 ( 2014牡丹江区域赛D题) (概率dp)
    HDU4336 Card Collector (概率dp+状压dp)
    POJ 2151 Check the difficulty of problems(概率DP)
    CF E2
    HDU4089 Activation(概率DP+处理环迭代式子)
    HDU4035 Maze (概率DP)
    牛客 Rabbit的数列 (线段树维护值为x的个数+区间覆盖)
  • 原文地址:https://www.cnblogs.com/shiheyuanfang/p/13376302.html
Copyright © 2020-2023  润新知