C++两个栈实现队列(含main函数),判断出栈的顺序

本文介绍了使用C++通过两个栈实现队列的数据结构,并提供了具体的代码实现。此外,还探讨了如何判断给定的弹出序列是否符合栈的压入顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用两个栈实现一个队列

最近一直再重温c++,就把最近遇到的题目和自己写的代码都记录下来吧,自己也可以复习

问题:使用两个栈实现一个队列
很经典的c++与数据结构问题,首先有思路一定要求得对栈和队列足够熟悉,我这里对于基础知识就不多展开了,上网搜或看《数据结构c语言版》。

代码:
#include<iostream>
#include<stack> //STL容器栈
//#include<queue> //队列
using namespace std;

//两个栈实现队列
//第一个栈相当于进行倒置,然后从上往下压入栈2,从栈2再弹出
class solution
{
public:
	stack<int> s1;
	stack<int> s2;
	void push(int node){
		s1.push(node);
	}
	int pop(){
		//当s2不为空时,将s1压入到s2
       if(s2.empty())
	   {   
		   while(!s1.empty())
				{int a=s1.top();
				 s2.push(a);
				 s1.pop();}
	   }
	   //弹出s2,此时即为队列的弹出
	   int b=s2.top();
	   s2.pop();
	   return b;

	}
};


int main()
{
solution ss;
ss.push(7);
ss.push(77);
ss.push(777);

cout<<ss.pop()<<endl;
cout<<ss.pop()<<endl;

}
结果

逐一压入7,77,777,按照First in First out得,结果正确
在这里插入图片描述

2、第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序

代码
/*输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。*/
/*思想:借助一个辅助栈来模拟出栈的过程,遍历入栈顺序,压入辅助栈,判断辅助栈栈顶与
出栈的顺序是否一样,不一样继续入栈,最后看辅助栈是否为空*/
class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        
        if(pushV.size()==0 || popV.size()==0)
            return false;
        stack<int> assist_stack;
        for(int i=0,j=0;i<pushV.size();i++)
        {
            assist_stack.push(pushV[i]);
            //利用了while中的pop,所以需要判断是否为空
            while(!assist_stack.empty() && assist_stack.top()==popV[j])
            { assist_stack.pop();
                j++;  }          
        }
         return assist_stack.empty();                     
    }
};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值