C++ 俩栈实现队列

自画草图:
在这里插入图片描述
1 2 3 4向s1压栈
s1弹栈,元素为4 3 2 1
4 3 2 1压向s2
s2弹栈为1 2 3 4
即符合队的特征先进先出


设计思路:
1.s1栈往里压数据
2.s2栈只负责弹数据
3.s2弹栈前,先判断s2是否为空栈,如果是空栈,判断s1是否是空栈,都为空栈则队空
4.s1不为空栈则往s2压数据
5.s2出栈

#include <iostream>
#include<stack>//系统栈 
using namespace std;
//俩栈实现队列
class MyQueue{
	protected:
		stack<int> s1;//s1栈只用来往里压数据 
		stack<int> s2;//s2栈只用来弹数据 
	public:
		//入队  向s1压栈 
		void enQueue(int ele){
			s1.push(ele);
		} 
		//出队  s2弹栈
		void deQueue(int &num){//num盛放出队元素 
			if(s2.empty()){//s2栈是否为空栈 
				if(s1.empty()){//s1栈是否为空栈 
					cout<<"空队"<<endl;//s1和s2均为空栈则队空 
					return ;
				}
				//把s1的元素弹出来压入s2中
				int ele = s1.top();//取栈顶元素,然后弹栈
				s1.pop();
				s2.push(ele); 
			}
			//s2弹栈,即出队
			num = s2.top();
			s2.pop(); 
		} 
};
 
int main(){
	
	MyQueue q;
	q.enQueue(10);
	cout<<"q.enQueue(10)========"<<endl;
	int num;
	q.deQueue(num);
	cout<<"q.deQueue()========"<<num<<endl;
	return 0;
}

在这里插入图片描述

发布了167 篇原创文章 · 获赞 52 · 访问量 6929

猜你喜欢

转载自blog.csdn.net/qq_42363032/article/details/103845914