题目:判断弹栈的顺序是否合法
实现思想:首先输入要判断数据的大小的个数N,在输入压栈的顺序,再输入弹栈的顺序。输入栈的数字用数组保存,弹栈的顺序数字用栈保存。
当栈的top为数组的第一个元素时,弹出栈中元素,并删除数组中元素(利用下标实现),如果不是,则从数组当前的第一个位置找,找到该元素时,弹栈并删除数组的该元素以及之前的元素,如果栈中每个元素都能找到在数组中找到,则输入的弹栈顺序正确,否则错误。
代码:
#include <iostream>
#include"head.h"
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
myStack a;
int na,nb,nc,life;
cin>>na;
int b[na];
for(int i=0;i<na;i++)
{
cin>>nb;
b[i]=nb;
}
for(int i=0;i<na;i++)
{
cin>>nc;
a.push(nc);
}
life=1;
int minSize=0;
while(!a.isEmpty()&&minSize<na)
{
// int minSize=0;
if(a.getTop()==b[minSize])
{
a.pop();
minSize++;
}
else
{
while(a.getTop()!=b[minSize])
{
minSize++;
if(minSize>=na)
{
life=0;
break;
}
}
}
}
if(life==1)
cout<<"输入合法";
else
cout<<"输入不合法";
return 0;
}