出栈题有点问题啊!大大们来看看吧。

数据结构初学者向大大们求助。【严题集3.3②】写出下列程序段的输出结果(栈的元素类型SElem Type为char)。void main( ){Stack S;Char x,y;InitStack(S);X=’c’;y=’k’;Push(S,x); Push(S,’a’); Push(S,y);Pop(S,x); Push(S,’t’); Push(S,x);Pop(S,x); Push(S,’s’);while(!StackEmpty(S)){ Pop(S,y);printf(y); };Printf(x);}答:输出为“stack”。我想问下,为什么是stack?在第一个Pop(S,x)处,x元素是在栈底的啊,怎么出的?请大大们把详细过程写一下,谢谢鸟!还有这个队列的!//********************************************【严题集3.12②】写出下列程序段的输出结果(队列中的元素类型QElem Type为char)。void main( ){Queue Q; Init Queue (Q);Char x=’e’; y=’c’;EnQueue (Q,’h’); EnQueue (Q,’r’); EnQueue (Q, y);DeQueue (Q,x); EnQueue (Q,x); DeQueue (Q,x); EnQueue (Q,’a’); while(!QueueEmpty(Q)){ DeQueue (Q,y);printf(y); };Printf(x);}答:输出为“char”。
2026年09月27日 23:46
有2个网友回答
网友(1):

一、
先解释一下你的一个误区:
Pop()函数是出栈并且将出栈的元素存放在第二个行参里,所以在这里x的值不再是c了,而是出栈的元素。。
过程:
首先是三个压栈操作,之后栈里的元素为:cak,左边的为栈底,右边是栈顶。
然后一个出栈,此时栈里的元素为:ca,x中存的是k;
之后两次压栈,此时栈里的元素为:catk;
之后一个出栈,此时栈里的元素为:cat,x中存的是k;
最后一次压栈,此时栈里的元素为:cats,x中存的是k;
之后while(!StackEmpty(S)){ Pop(S,y);printf(y); };
结果是stac,
Printf(x);
结果是k,
所以最终的结果为stack。。。明白了吧!
二、
首先三次入队操作,结果为:crh,左边为对尾,右边是队首,
一次出队一次入队后变为:hcr,
再一次出队一次入队后变为:ahc ,此时x中存的是r,
语句while(!QueueEmpty(Q)){ DeQueue (Q,y);printf(y); };执行后结果为:cha;
Printf(x);执行后为:r
故结果为:char。。
本人觉得已经讲解的很明白了,OK??

网友(2):

设堆栈指针R13初始值为#0x50,则:
STM指令执行完后堆栈指针R13=( 0x60 )。请在图中标出STM指令执行完后堆栈段的数据存放情况。
LDM指令执行完后堆栈指针R13=( 0x50 ),各寄存器的值分别为:
(R1)=( 0x11 ) ,(R2)=( 0x22 ) ,(R3)=( 0x33 ) ,(R4)=( 0x44 ) ,(R5)=( 0x55 )