[刷题] PTA 02-线性结构4 Pop Sequence

模拟栈进出

方法一:

 1 #include<stdio.h>
 2 #define MAXSIZE 1000
 3 
 4 typedef struct{
 5     int data[MAXSIZE];
 6     int top;
 7 }SqStack;
 8 
 9 int InitStack(SqStack *s){
10     s->top=-1;
11     return 0;
12 }
13 
14 int Push(SqStack *s,int e){
15     if(s->top==MAXSIZE) return 1;
16     s->top++;
17     s->data[s->top]=e;
18     return 0;
19 }
20 
21 int Pop(SqStack *s){
22     int e;
23     if(s->top==-1) return 1;
24     e = s->data[s->top];
25     s->top--;
26     return e;
27 }
28 
29 int main(){
30     int m,n,k,i,h;
31     SqStack s,t;
32     scanf("%d%d%d",&m,&n,&k);
33     while(k--){
34         InitStack(&s);
35         InitStack(&t);
36         for(i=n-1;i>=0;i--){
37             scanf("%d",&(t.data[i]));
38         }
39         t.top=n-1;
40         i=0;
41         while(i<=n){
42             if(s.data[s.top]==t.data[t.top]&&s.top!=-1){
43                 Pop(&s);
44                 Pop(&t);
45             }else if(s.top<m-1 && i<n){
46                 i++;
47                 Push(&s,i);
48             }else{
49                 break;
50             }
51         }
52         if(s.top==-1 && t.top==-1){
53             printf("YES\n");
54         }else{
55             printf("NO\n");
56         }
57     }
58     return 0;
59 }

分析:

1、自定义栈

2、通过两个栈模拟进出

 

方法二:

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<vector>
 4 #include<stack>
 5 using namespace std;
 6 
 7 int M,N,K;
 8 
 9 int Check(vector<int> &v) {
10     int i=0;
11     int num=1;
12     int cap=M+1;
13     stack<int> sta;
14     sta.push(0);
15     while(i<N) {
16         while(v[i]>sta.top()&&sta.size()<cap)
17             sta.push(num++);
18         if(v[i++]==sta.top())
19             sta.pop();
20         else
21             return 0;
22     }
23     return 1;
24 }
25 
26 int main() {
27     vector<int> vec(N,0);
28     scanf("%d%d%d",&M,&N,&K);
29     for(int i=0; i<K; i++) {
30         for(int j=0; j<N; j++) {
31             int number;
32             scanf("%d",&number);
33             vec.push_back(number);
34         }
35         if(Check(vec)) printf("YES\n");
36         else printf("NO\n");
37         vec.clear();
38     }
39     return 0;
40 }

分析:

1、利用c++容器vector和stack模拟

 

posted @ 2019-05-04 11:18  cxc1357  阅读(217)  评论(0编辑  收藏  举报