面试题22 栈的压入弹出序列

本文介绍了一个算法,用于判断给定的两个整数序列是否为合法的栈压入和弹出序列。通过使用辅助栈模拟压栈和出栈操作,验证了序列的有效性。

思路:根据弹出序列的顺序确定哪些元素已入栈。栈为空或是栈顶元素与弹出序列不一致,则将压入序列的元素入栈直到和栈顶元素和弹出序列相当等。大循环终止条件while(indexPop<length)

 函数接口: bool IsPopOrder(int*pushArray,int*popArray,int length);


#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<stack>
using namespace std;
  
//面试题22栈的压入弹出序列  思路:根据弹出序列的顺序确定哪些元素已入栈。栈为空或是栈顶元素与弹出序列不一致,则将压入序列的元素入栈直到和栈顶元素和弹出序列相当等。大循环终止条件while(indexPop<length)
bool IsPopOrder(int * pushArray,int* popArray,int length)
{
	 if(pushArray!=NULL&&popArray!=NULL&&length>0)
	 {
	     stack<int>Stack;
		 int indexPush=0,indexPop=0;
		 while(indexPop<length)
		 {
		     while(Stack.empty()||Stack.top()!=popArray[indexPop])//栈为空或栈顶元素不为弹出序列的的值
			 {
			      if(indexPush>=length)
				  {
				     break;//此处break 比较关键
				  }
				  Stack.push(pushArray[indexPush]);
				  indexPush++;
			 }
			 if(Stack.top()!=popArray[indexPop])
			 {
			     break;
			 }
			 Stack.pop();
			 indexPop++;
		 }
		 if(Stack.empty()&&indexPop>=length)
		 {
		      return true;
		 }
	 }
   
	
	 return false;
}
int main()
{
	int pushArray[]={1,2,3,4,5};
	int popArray[]={4,5,3,2,1};
	int length=sizeof(pushArray)/sizeof(pushArray[0]);
	if(IsPopOrder(pushArray,popArray,length))
	{
	    cout<<"是栈的压入弹出序列"<<endl;
	}
	else
	{
	    cout<<"不是栈的压入弹出序列"<<endl;
	}
   return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值