数据结构实验之栈与队列七:出栈序列判定

数据结构实验之栈与队列七:出栈序列判定

Description

给一个初始的入栈序列,其次序即为元素的入栈次序,栈顶元素可以随时出栈,每个元素只能入栈依次。输入一个入栈序列,后面依次输入多个序列,请判断这些序列是否为所给入栈序列合法的出栈序列。

例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个出栈序列,但4,3,5,1,2就不可能是该序列的出栈序列。假设压入栈的所有数字均不相等。

Input

 第一行输入整数n(1<=n<=10000),表示序列的长度。

第二行输入n个整数,表示栈的压入顺序。

第三行输入整数t(1<=t<=10)。

后面依次输入t行,每行n个整数,表示要判断的每一个出栈序列。

Output

 对应每个测试案例输出一行,如果由初始入栈序列可以得到该出栈序列,则输出yes,否则输出no。

 

Sample

Input 

5
1 2 3 4 5
2
4 5 3 2 1
4 3 5 1 2

Output 

yes
no
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int i,j,top,n,t;
 5     int a[10005];
 6     int b[10005];
 7     int zhan[10005];
 8     scanf("%d",&n);
 9     for(i=0;i<n;i++)
10     {
11         scanf("%d",&a[i]);
12     }
13     scanf("%d",&t);
14     while(t--)
15     {
16         for(j=0;j<n;j++)
17         {
18             scanf("%d",&b[j]);
19         }
20         i=0;
21         j=0;
22         top=-1;
23         while(j<n)          //看按照b[]中的n個元素的序列是否都能出棧
24         {
25             if(a[i]==b[j])
26             {                     //說明要出棧的b[i]中的元素與a[]中某元素相等,可以出棧,元素後移判斷下一個。
27                 i++;
28                 j++;
29             }
30             else if(top!=-1&&zhan[top]==b[j])   //如果棧不空,並且此時棧頂元素等於b[]中要出棧的元素
31             {
32                 j++;
33                 top--;                //滿足條件,b[j]即可出棧,即j後移一位判斷下一個。同時棧頂元素下標減一。
34             }
35             else if(i<n)
36             {
37                 zhan[++top]=a[i];//將上一步a[i]!=b[j]的a[i]元素進棧
38                 i++;
39             }
40             else
41                 break;
42         }
43         if(top==-1)     //判斷棧內元素是否爲空
44         {
45             printf("yes\n");
46         }
47         else
48         {
49             printf("no\n");
50         }
51     }
52     return 0;
53 }

 

posted on 2020-02-26 14:53  llllIYIlIN  阅读(274)  评论(0编辑  收藏  举报

导航