左神算法基础class3-2—题目3仅用栈结构实现队列结构

左神算法基础class3-2—题目3仅用栈结构实现队列结构

  • 1.题目
  • 2.分析
  • 3.核心代码
  • 4.完整代码
  • 5.输出结果

1.题目

如何仅用栈结构实现队列结构?

2.分析

栈本身是先进后出的结构,要想实现先进先出队列的作用就需要两个栈,把一个栈先倒到另一个栈内再pop出来。
(1)设计两个栈,一个命名为push、一个为pop。把数据输入push栈,把从pop栈输出的数据作为队列的输出结果。
左神算法基础class3-2—题目3仅用栈结构实现队列结构_第1张图片
(2)需要输出时,需要先把push栈的内容全部倒入pop栈,再把pop的栈顶输出。
Tips:把push栈倒入pop栈需要满足下列条件:
①push倒的时候必须要倒完
②pop内有东西则不能倒

3.核心代码

根据push和pop栈空与非空可分为三种情况:
①push、pop都空则直接return;
②pop非空则不倒直接输出;
③push不空,pop空则倒入再输出;

void pop_num(stack<int> &pushstack,stack<int> &popstack)
 {
     
	 if(popstack.empty() && pushstack.empty())
	 {
     
		 cout<<"空"<<endl;
		 return;
	 }
	 
	 if(popstack.empty())
	 {
     
		 while(!pushstack.empty())
		 {
     
			 popstack.push(pushstack.top());
			 pushstack.pop();
		 }
	 }
		 cout<< popstack.top() <<endl;
		 popstack.pop();
 }

4.完整代码

#include
#include
using namespace std;

 void pop_num(stack<int> &pushstack,stack<int> &popstack)
 {
     
	 if(popstack.empty() && pushstack.empty())
	 {
     
		 cout<<"空"<<endl;
		 return;
	 }
	 
	 if(popstack.empty())
	 {
     
		 while(!pushstack.empty())
		 {
     
			 popstack.push(pushstack.top());
			 pushstack.pop();
		 }
	 }
		 cout<< popstack.top() <<endl;
		 popstack.pop();

 }
int main()
{
     
	stack<int> pushstack;
	stack<int> popstack;
	pushstack.push(1);
	pushstack.push(2);
	pushstack.push(3);
	pop_num(pushstack,popstack);
	pop_num(pushstack,popstack);
	
	pushstack.push(4);
	pop_num(pushstack,popstack);
	pushstack.push(5);

	pop_num(pushstack,popstack);
	pop_num(pushstack,popstack);
	pop_num(pushstack,popstack);

	system("pause");
	return 0;
}

5.输出结果

输入1,2,3,4,5时不管在什么位置倒入pop栈,输出顺序一定是1,2,3,4,5
在这里插入图片描述

你可能感兴趣的:(左神算法基础课,栈,算法,队列,c++)