• 由两个栈组成的队列(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;
     
    }
     
    测试结果:
     
  • 相关阅读:
    目标跟踪之meanshift---均值漂移搞起2000过时的
    目标检测之人头---人头检测,安全帽检测,头盔检测,人流检测
    图像处理之opencv---常用函数
    图像处理之滤波---gabor
    图像处理之滤波---滤波在游戏中的应用boxfilter
    模式识别之不变矩---SIFT和SURF的比较
    Java容器集合类的区别用法
    java读取txt字符串挨个写入int数组
    阶段3 3.SpringMVC·_06.异常处理及拦截器_1 SpringMVC异常处理之分析和搭建环境
    阶段3 3.SpringMVC·_06.异常处理及拦截器_4 SpringMVC拦截器之介绍和搭建环境
  • 原文地址:https://www.cnblogs.com/shiheyuanfang/p/13376302.html
Copyright © 2020-2023  润新知