zoukankan      html  css  js  c++  java
  • 由两个栈组成的队列(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;
     
    }
     
    测试结果:
     
  • 相关阅读:
    再来五道剑指offer题目
    高强度学习训练第十天总结:Class文件
    windows linux 子系统及windows terminal的使用。
    从植物大战僵尸开始一步一步带你入门逆向工程,
    高强度学习训练第九天总结:5道剑指offer的题目
    高强度学习训练第八天总结:MySQL的一些优化
    JVM的一些工具的简要使用
    手把手教你使用Java实现一个神经网络
    指定路径创建文件,并写入数据
    c#创建windows服务(代码方式安装、启动、停止、卸载服务)
  • 原文地址:https://www.cnblogs.com/shiheyuanfang/p/13376302.html
Copyright © 2011-2022 走看看