码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-07-25 23:40:07      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:row   c++   img   mes   dex   std   string   class   pac   

代码:

#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 << ‘\n‘;
      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:" << ‘\n‘;
  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() << ‘\n‘;//弹出stackPop栈顶元素
  std::cout <<  ‘\n‘;
  std::cout << "this is queue stackPop_data(from_poll_function):" << ‘\n‘;
  while(!myqueue.empty())
  {
    std::cout << myqueue.poll() << ‘\n‘;//弹出stackPop所有元素
  }
 
  return 0;
 
}
 
测试结果:
 
技术图片

 

 

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

标签:row   c++   img   mes   dex   std   string   class   pac   

原文地址:https://www.cnblogs.com/shiheyuanfang/p/13376302.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!