pta编程题5 Pop Sequence

Posted bloglxc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pta编程题5 Pop Sequence相关的知识,希望对你有一定的参考价值。

第一次提交结果都是YES,后来检查发现Push,Pop函数写的有问题,即Stack sta改为引用Stack &sta,否则不能改变实参的值。

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 
 5 int M;// 栈最大容量
 6 struct Stack
 7 {
 8    int arr[1000];
 9    int top = -1;
10 };
11 
12 void push(struct Stack &s, int i);
13 void pop(struct Stack &s);
14 bool isEmpty(struct Stack s);
15 int top(struct Stack s);
16 bool valid (vector<int> v);
17 
18 int main()
19 {
20     int n, k, i, j, t;
21     cin >> M >> n >> k;
22     int maxPop = 0;
23     vector<int> v(n);
24     for (i = 0; i < k; i++)
25     {
26         for (j = 0; j < n; j++)
27             cin >> v[j];
28         if (valid(v)) cout << "YES" << endl;
29         else cout << "NO" << endl;
30     }
31     return 0;
32 }
33 
34 void push(struct Stack &s, int i)
35 {
36     s.arr[++s.top] = i;
37 }
38 
39 void pop(struct Stack &s)
40 {
41     s.top--;
42 }
43 
44 bool isEmpty(struct Stack s)
45 {
46     return s.top == -1;
47 }
48 
49 int top(struct Stack s)
50 {
51     return s.arr[s.top];
52 }
53 
54 bool valid (vector<int> v)
55 {
56     struct Stack sta;
57     int i, j, maxPop = 0;
58     for (i = 0; i < v.size(); i++)
59     {
60         if (v[i] > maxPop)
61         {
62             for (j = maxPop + 1; j < v[i]; j++)
63                 push(sta, j);
64             if (sta.top + 2 > M) return false;
65             maxPop = v[i];
66         }
67         else if (!isEmpty(sta) && v[i] == top(sta))
68             pop(sta);
69         else if (!isEmpty(sta) && v[i] < top(sta))
70             return false;
71     }
72     return true;
73 }

 

以上是关于pta编程题5 Pop Sequence的主要内容,如果未能解决你的问题,请参考以下文章

数据结构线性结构 —— 编程作业 04 :Pop Sequence

PAT 1051. Pop Sequence (25)

PAT甲题题解-1051. Pop Sequence (25)-堆栈

pta 编程题15 列出连通集

1051 Pop Sequence 需再做

pta乙级每年考试时间