- -
[习题 4-1]运算题。
1.有 6 个元素 A、B、C、D、E、F 依次进栈,允许任何时候出栈,能否得到以下的每个出栈序列,假设能,给出栈操作的过程,假设不能,简述其理由。
〔1〕CDBEFA 〔2〕ABEDFC 〔3〕DCEABF 〔4〕BAEFCD
2.有 4 个元素 a,b,c,d 依次进栈,任何时候都可以出栈,请写出所有可能的出栈序列和所有不存在的序列。
3.用一维数组 a[7]顺序储一个循环队列,队首和队尾指针分别用 front 和 rear 表示,当前队列中已有 5 个元素:23,45,67,80,34,其中,23 为队首元素,front 的值为 3,请
画出对应的存储状态,当连续做 4 次出队运算后,再让 15,36,48 元素依次进队,请再次画出对应的存储状态。
4.用于顺序存储一个队列的数组的长度为 N,队首和队尾指针分别为 front 和 rear,写出求此队列长度(即所含元素个数)的公式.
参考答案〔从简〕
1,(1)能: push(S,A), push(S,B), push(S,C), pop(S), push(S,D), pop(S), pop(S), push(S,E), pop(S), push(S,F), pop(S), pop(S).
(2)能:push(S,A), pop(S), push(S,B), pop(S), push(S,C), push(S,D), push(S,E),pop(S), pop(S), push(S,F), pop(S), pop(S).
(3)不能: 当 E 出栈时,AB 必需在栈,而后继 A 出栈先于 B,不符合后进先出原那么。
(4)不能: 当 F 出栈时,CD 必需在栈,而后继 C 出栈先于 D,不符合后进先出原那么。
2,所有可能的出栈序列:
abcd; abdc; acbd; acdb; adcb;
bacd; badc; bcad; bcda; bdca;
cbad; cbda; cdba;
dcba.
所有不存在的序列:
adbc;
bdac;
cabd; cadb; cdab;
dabc; dacb; dbac; dbca; dcab.
3,
0 1 2 3 4 5 6
------------------------------------------------------------------
[80 34 23 45 67]
↑rear ↑front
[ 34 15 36 48 ]
↑front↑rear
4,队列长度 L 的计算公式为:
L= ( N+rear-front ) %N
[ 说明:
当 rear>front 时,L = rear - front = ( N+rear-front ) % N;
当 rear<front 时,队列被分为两个局部,前局部在数组的尾部,其元素个数为 N-1-front , 后局部在数组的首部,其元素个数为 rear+1 , 所以:
L =( rear+1+N-1 - front )%N= ( N+rear-front ) % N; ]
- - word.zl-