24对于下面的每一步,画出栈元素与栈顶指针的示意图:(1)栈空(2)在栈中插入一个元素A;(3)在栈中插入一个元素X;(4)删除栈顶元素;(5)在栈中插入一个元素T;(6)在栈中插入一个元素G;(7)栈初始化。解:如图21所示。
图21栈元素与栈顶指针的示意图25设循环队列的容量为70(序号为170),现经过一系列的入队与退队运算后,有:(1)fro
t14,rear21(2)fro
t23,rear12问在这两种情况下,循环队列中各有多少个元素?解:设循环队列的容量为m。如果rear>fro
t,则循环队列中的元素个数为rear-fro
t;如果rear<fro
t,则循环队列中的元素个数为m+(rear-fro
t)。由此可以得到:(1)循环队列中的元素个数为rear-fro
t=21-147。(2)循环队列中的元素个数为m+(rear-fro
t)70+(12-23)59。26试图示在表达式A(BD)TCEF执行过程中运算符栈和操作数栈的变化情况。解:(1)建立操作数栈OVS(栈顶指针为topv)与运算符栈OPS(栈顶指针为topp),其中操作数栈的初始状态为空,在运算符栈中已压入一个表达结束符“;”,如图22(a)所示。
ff(2)读出操作数A进OVS栈,读出运算符“”进OPS栈,读出左括号“(”进OPS
栈,读出操作数B进OVS栈,读出运算符“-”进OPS栈,读出操作数D进OVS栈,如图
22(b)所示。
(3)读出右括号“)”,由于右括号“)”的优先级不大于OPS栈栈顶运算符“-”的
优先级,因此从OVS栈依次弹出操作数D与B,从OPS栈弹出运算符“-”,然后作运算T1=B-D,并将运算结果T1压入OVS栈,如图22(e)所示。在这种情况下,刚读出的右括
号“)”下次将重新考虑。
(4)右括号“)”遇到OPS栈中的左括号“(”,从OPS栈中退出左括号“(”,如图22
(d)所示。
(5)读出运算符“”,由于运算符“”的优先级不大于OPS栈栈顶运算符“”
的优先级,因此从OVS栈依次弹出操作数T1与A,从OPS栈弹出运算符“”,然后作运算T2AT1,,并将运算结果T2压入OVS栈,如图22(e)所示。在这种情况下,刚读出的运算符“”下次将重新考虑。
(6)运算符“”进OPS栈,读出操作数T进OVS栈,如图22(f)所示。
(7)读出运算符“+”,由于运算符“+”的优先级不大于OPS栈栈顶运算符“”的
优先级,因此从OVS栈依次弹出操作数T与T2,从OPS栈弹出运算符“”,然后作运算T3T2T,并将运算结果T3压入OVS栈,如图22(g)所示。在这种情况下,刚读出的运算符“+”下次将重新考虑。
(8r