概述
假设输入序列是1、2、…、n。设计一个算法判断通过一个栈能否得到由a[0..n-1](为1、2、…、n的某个排列)指定的出栈序列。比如:例如,n=3,a[]={2,3,1}是合法出栈序列,a[]={3,1,2}不是合法出栈序列。
要求:1)用链栈实现;2)测试样例 n=4,a[]={2,3,1,4},a[]={4,3,1,2}
#include <iostream>
using namespace std;
int const maxSize =100;
typedef struct Stack
{
int data[100];
int top;
}Stack;
void InitStack(Stack &S)
{
S.top = -1;
}
void Push(Stack &S,int e)
{
S.data[++S.top] = e;
}
void Pop(Stack &S,int &e)
{
e = S.data[S.top--];
}
void PrintStack(Stack S)
{
while(S.top>-1)
{
printf("%d ",S.data[S.top--]);
}
}
int main() {
int n;Stack s;int temp,flag=1;
cout<<"intput the number! "<<endl;
cin>>n;int a[n];
cout<<"int put the stack sequence!"<<endl;
for(int i=0;i<n;i++){cin>>a[i];}
for(int i=1;i<=a[0];i++)
{
Push(s,i); //对第一个出栈数字之前的所有数字进行进栈操作。
}
Pop(s,temp);
for(int i=1;i<n;i++)
{
if(a[i]>a[i-1]) //如果数字大于前一位,则继续进栈至这个数字
{
for(int j=1;j<=a[i]-a[i-1];j++)
{
Push(s,a[i-1]+j);
}
}
Pop(s,temp); //出栈
if(a[i]!=temp)
{
cout<<"illegal sequence!";//判断顺序是否一致
flag=0;
break;
}
}
if(flag)cout<<"legal sequence!"<<endl;
return 0;
}
最后
以上就是靓丽镜子为你收集整理的判断出栈条件是否符合现实的全部内容,希望文章能够帮你解决判断出栈条件是否符合现实所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复