计算机二级C++——公共基础:如果进栈序列为A,B,C,D,则可能的出栈序列是()

如果进栈序列为A,B,C,D,则可能的出栈序列是()

 

 [解析] 栈的操作原则为后进先出。选项B) 中出栈顺序可按“A进,B进,B出,C进,D进,D出,C出,A出”实现。

 

 1 #include<iostream>
 2 using namespace std;
 3 int n=4;
 4 string s="abcd";
 5 //全局变量是非常危险的事情。
 6 void fn(int a,int b,int data1[],int result1[])
 7 {
 8 //a是栈中元素的个数,b是还未入栈的元素的个数。
 9 int result[4];//记录路径。
10 int data[4];//记录栈中的元素。bai
11 memcpy(data,data1,4*sizeof(int));
12 memcpy(result,result1,4*sizeof(int));
13 if(b==0)
14 {
15 //打印结果。
16 while(result[b])
17 {
18 cout<<s[result[b++]-1];
19 }
20 for(int i=a-1;i>=0;i--)
21 {
22 cout<<s[data[i]-1];
23 }
24 cout<<endl;
25 }
26 else
27 {
28 data[a]=n-b+1;
29 a++;
30 b--;
31 fn(a,b,data,result);
32 a--;
33 b++;//恢复数据。
34 data[a]=0;
35 if(a>0&&b!=0)
36 {
37 result[n-a-b]=data[a-1];
38 data[a-1]=0;
39 a--;
40 fn(a,b,data,result);
41 }
42 }
43 }
44 int main()
45 {
46 int data[4]={0};
47 int result[4]={0};
48 fn(0,4,data,result);
49 return 0;
50 }

 

 

所有的结果为:

dcba
cdba
cbda
cbad
bdca
bcda
bcad
badc
bacd
adcb
acdb
acbd
abdc
abcd

posted @ 2021-01-20 18:03  闫佳杰  阅读(1149)  评论(0)    收藏  举报