我正在学习期中考试,我需要帮助解决这个问题:
假设在LIFO堆栈上执行混合的推送和弹出操作序列。按下按顺序推送数字0到9; pops打印出返回值。可能出现以下哪个输出序列?选择所有可能的。
1 2 5 4 3 6 0 9 8 7
6 5 4 3 2 1 0 7 8 9
4 6 8 7 5 3 2 9 0 1
0 1 5 6 4 3 7 9 2 8
0 2 4 1 6 7 5 9 8 3
我相信答案是:
6 5 4 3 2 1 0 7 8 9
我说错了吗?提前谢谢!
答案 0 :(得分:1)
第一个是可能的,序列是:
push(0);
push(1);
pop();
push(2);
pop();
push(3);
push(4);
push(5);
pop();
pop();
pop();
push(6);
pop();
pop();
push(7);
push(8);
push(9);
pop();
pop();
pop();
第二个也可能是序列:
push(0);
push(1);
push(2);
push(3);
push(4);
push(5);
push(6);
pop();
pop();
pop();
pop();
pop();
pop();
pop();
push(7);
pop();
push(8);
pop();
push(9);
pop();
第三个是不可能的,因为打印后9
堆栈将包含0 1
,而pop()
将为您1
提供0
。
也是第四种也是不可能的,因为打印9
堆叠后会有2 8
而你pop()
之前不能2
8
。
第五种也是不可能的,因为在打印之后,4个堆栈将包含1 3
,并且将首先弹出3
。