数据结构 02-线性结构4 Pop Sequence

刚开始拿到这道题的时候错误的做法:

1 //相邻之间的数小于等于M
 2 //首先弹出来的数小于等于M
 3 #include<stdio.h>
 4 #include<math.h>
 5 #define MAXN = 1000000;
 6 int M,N,K;
 7 int main(){
 8     int pre,now,i,j,flag=0;
 9     scanf("%d %d %d",&M,&N,&K);
10     for(i=0;i<K;i++){
11         flag = 0;
12         scanf("%d",&now);
13         if(now>M) flag=1;
14         for(j=1;j<N;j++){
15             pre = now;
16             scanf("%d",&now);
17             if(abs(pre-now)>M) flag=1;
18         }
19         if(flag==1) printf("NO\n");
20         else printf("YES\n");
21     }
22 
23     return 0;
24 }

后来发现问题后,重新选择的方法:

 1 #include<stdio.h>
 2 #define MAXN 10000
 3 int M,N,K;
 4 int b[MAXN],stack[MAXN],top;
 5 int detect();
 6 int main(){
 7     int p,i,j,flag=0;
 8     scanf("%d %d %d",&M,&N,&K);
 9     b[0] = N;
10     for(i=0;i<K;i++){
11        for(j=1;j<=N;j++){
12            scanf("%d",&b[j]);
13        }
14        if(detect()==1) printf("YES\n");
15        else printf("NO\n");
16     }
17     return 0;
18 }
19 int detect(){
20     int i,j,value,flag,start;
21     top = 0;
22     stack[top] = b[0];
23     start= 1;
24 
25     for(i=1;i<=b[0];i++){
26         value = b[i];
27         flag = 0;
28         for(j=1;j<=top;j++){
29             if(stack[j]==value) flag = 1;
30         }
31         //不在栈中
32         if(flag==0){
33             //前面的元素入栈
34             if(start<=value){
35                 for(j=start;j<=value;j++){
36                     ++top;
37                     if(top>M) return 0;
38                     else stack[top] = j;
39                     }
40                 start = value+1;
41                 top--;
42             }
43            
44         }
45         //在栈中
46         else{
47             if(stack[top]!=value) return 0;
48             else top--;
49 
50         }
51         
52     }
53     return 1;
54 }

 总结:使用了栈的方法,注意栈的容量问题。

猜你喜欢

转载自www.cnblogs.com/Learn-Excel/p/12610772.html