栈和队列
常见提问方式的问题:
1、设入栈顺序为A,B,C,D,E.则出栈序列不可能为(B)
A、EDCBA
B、ADEBC
C、ABCDE
D、ABDCE
这种题目都有一种规律:先出来的序号后面一定不能有比他本身小的从小到大排列的序列。
比如
12345
45321 正确
43512(5后面有比它本身小且从小到大排序所以是错的)
2、若进栈序列为1,2,3.4假定进栈和出栈可以穿插进行,则可能的出栈序列是(D)
A、2,4,1,3
B、3,1,4,2
C、3,4,1,2
D、1,2,3,4
原则:如果想要后面的先出栈,那么按照1234的入栈顺序,前面的必须已经入栈,比如要让3第一个出栈,那么入栈顺序为:
1入栈,2入栈,3入栈,之后3出栈,这样3就是第一个出栈的,如果想让4接着出栈,那么就4入栈,然后再出栈,然后2出栈,1出栈
最后出栈顺序为:
3421
以此规则分别分析ABCD
A 表示:
1入栈,2入栈,2出栈,3入栈,4入栈,4出栈,后面3必须先出栈,1才能出栈,所以A错
B表示:
1入栈,2入栈,3入栈,3 出栈,后面2必须先出栈,1才能出栈,所以B错
C表示:
1入栈,2入栈,3入栈,3 出栈, 4入栈,4出栈, 后面2必须先出栈,1才能出栈,所以C错
D表示:
1入栈,1出栈, 2入栈,2 出栈, 3入栈,3 出栈, 4入栈,4出栈,正确
3、队列{a,b,c,d,e}依次入队,允许在其两端进行入队操作,但仅允许在一端进行出队操作,则不可能得到的 出队 序 列 是(C)
A、b, a, c, d, e
B、d, b, a, c, e
C、d, b, c, a, e
D、e, c, b, a, d
根据题目的意思,假设队列的两端依次是P和Q:(Q端删除)
A选项:a从P端先进入队列,然后b从Q端再进入队列,这个时候再执行出队操作,依次为b,a,c,d,e
B选项:a从P端先入队列,