一、
先解释一下你的一个误区:
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??
设堆栈指针R13初始值为#0x50,则:
STM指令执行完后堆栈指针R13=( 0x60 )。请在图中标出STM指令执行完后堆栈段的数据存放情况。
LDM指令执行完后堆栈指针R13=( 0x50 ),各寄存器的值分别为:
(R1)=( 0x11 ) ,(R2)=( 0x22 ) ,(R3)=( 0x33 ) ,(R4)=( 0x44 ) ,(R5)=( 0x55 )