[3334]数据结构实验之栈与队列七:出栈序列判定
程序员文章站
2022-03-24 16:22:02
...
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,in[10001],out[10001],t;
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%d",&in[i]);
}
scanf("%d",&t);
while(t--)
{
for(i=0; i<n; i++)
scanf("%d",&out[i]);
int j=0,flag=1;
int st[10000];
int top =0;
for(i=0; i<n; i++)
{
int num=out[i];
if(top==0||st[top-1]!=num)
{
for(; j<n;)
{
if(in[j]!=num)
st[top++]=in[j++];
else
{
st[top++]=in[j++];
break;
}
}
}
if(st[top-1]==num)
top--;
else
{
flag=0;
break;
}
}
if(flag) printf("yes\n");
else printf("no\n");
}
return 0;
}
模拟出栈。
in中是等待入栈的元素,out是出栈的顺序,st是模拟入栈出栈的顺序表。注意,在模拟过程中,如果in中的元素不等于num,说明在in[j]==num之前的j个元素是已经入栈st了,相等之后出栈。最后栈中剩下的元素依次出栈st,如若st出栈顺序和out出栈顺序不同,则说明out中的出栈序列不成立。
上一篇: 算法--桶排序与基数排序
下一篇: 数据结构学习(一):数组