我是靠谱客的博主 靓丽镜子,这篇文章主要介绍判断出栈条件是否符合现实,现在分享给大家,希望可以做个参考。

假设输入序列是1、2、…、n。设计一个算法判断通过一个栈能否得到由a[0..n-1](为1、2、…、n的某个排列)指定的出栈序列。比如:例如,n=3,a[]={2,3,1}是合法出栈序列,a[]={3,1,2}不是合法出栈序列。

要求:1)用链栈实现;2)测试样例 n=4,a[]={2,3,1,4},a[]={4,3,1,2}

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream> using namespace std; int const maxSize =100; typedef struct Stack { int data[100]; int top; }Stack; void InitStack(Stack &S) { S.top = -1; } void Push(Stack &S,int e) { S.data[++S.top] = e; } void Pop(Stack &S,int &e) { e = S.data[S.top--]; } void PrintStack(Stack S) { while(S.top>-1) { printf("%d ",S.data[S.top--]); } } int main() { int n;Stack s;int temp,flag=1; cout<<"intput the number! "<<endl; cin>>n;int a[n]; cout<<"int put the stack sequence!"<<endl; for(int i=0;i<n;i++){cin>>a[i];} for(int i=1;i<=a[0];i++) { Push(s,i); //对第一个出栈数字之前的所有数字进行进栈操作。 } Pop(s,temp); for(int i=1;i<n;i++) { if(a[i]>a[i-1]) //如果数字大于前一位,则继续进栈至这个数字 { for(int j=1;j<=a[i]-a[i-1];j++) { Push(s,a[i-1]+j); } } Pop(s,temp); //出栈 if(a[i]!=temp) { cout<<"illegal sequence!";//判断顺序是否一致 flag=0; break; } } if(flag)cout<<"legal sequence!"<<endl; return 0; }

最后

以上就是靓丽镜子最近收集整理的关于判断出栈条件是否符合现实的全部内容,更多相关判断出栈条件是否符合现实内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(94)

评论列表共有 0 条评论

立即
投稿
返回
顶部