关于顺序栈的退栈和入栈操作
代码
Void main()
{
Stack S;Char x,y;
InitStack(S);
x='c';y='k';
push(S,x);push(S,'a');push(S,y); ---(1)
pop(S,x);push(S,'t');push(S,x); ---(2)
pop(S,x);push(S,'s'); ---(3)
while(!StackEmpty(S)){Pop(S,y);printf(y);}; ---(4)
printf(x); ---(5)
}
解析
以上面这个代码为例子,初步探索。
首先x='c';y='k';
(1)push(S,x);push(S,'a');push(S,y);
push(S,x); 入栈操作, 变量x入栈,就是'c'入栈
push(S,'a'); 入栈操作,然后'a'入栈,
push(S,y); 入栈操作, 变量y入栈,就是'k'入栈
此时,栈从栈顶到栈底排列为:
k
a
c
(2)pop(S,x);push(S,t');push(S,x);
pop(S,x); 出栈操作,栈顶元素开始出栈,x取退栈元素,x='k'
push(S,'t'); 入栈操作,'t'入栈
push(S,x); 入栈操作,变量x入栈,就是'k'入栈
此时,栈从栈顶到栈底排列为:
k
t
a
c
(3)pop(S,x);push(S,'s');
pop(S,x); 出栈操作,栈顶元素开始出栈,x取退栈元素,x='k'
push(S,'s'); 入栈操作,'s'入栈
此时,栈从栈顶到栈底排列为:
s
t
a
c
(4)while(!StackEmpty(S)){Pop(S,y);printf(y);};
第一次循环:while(!StackEmpty(S)) 判断S是否是空栈,不是空栈就进行循环
Pop(S,y); 出栈操作,栈顶元素开始出栈,y取退栈元素,y='s'
printf(y); 打印变量y
整个函数打印:
s
第二次循环:while(!StackEmpty(S)) 判断S是否是空栈,不是空栈就进行循环
Pop(S,y); 出栈操作,栈顶元素开始出栈,y取退栈元素,y='t'
printf(y); 打印变量y
整个函数打印:
s
t
第三次循环:while(!StackEmpty(S)) 判断S是否是空栈,不是空栈就进行循环
Pop(S,y); 出栈操作,栈顶元素开始出栈,y取退栈元素,y='a'
printf(y); 打印变量y
整个函数打印:
s
t
a
第四次循环:while(!StackEmpty(S)) 判断S是否是空栈,不是空栈就进行循环
Pop(S,y); 出栈操作,栈顶元素开始出栈,y取退栈元素,y='c'
printf(y); 打印变量y
整个函数打印:
s
t
a
c
第五次循环:while(!StackEmpty(S)) 判断S是否是空栈,是空栈就退出循环
(5)printf(x); 打印变量x,打印'k'
整个函数打印:
s
t
a
c
k
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)