LIFO堆栈上的序列



我正在为期中考试学习,我需要帮助解决这个问题:

假设在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

我说得对吗?提前谢谢!

第一个是可能的,序列是:

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,而在8之前不能有pop() 2

第五个也是不可能的,因为在打印后4堆栈将包含1 3,并且3将首先弹出。

最新更新