如何理解"栈是一种后进先出的数据结构,只能在末端进行插入和删除的操作,所有的函数调用都是通过栈完成的

整段话试这样的,“栈是一种后进先出的数据结构,它只能在末端进行插入和删除元素的操作,所有的函数调用都是通过栈完成的,由于程序员不需要自己来维护栈上面的内存分配任务,所以栈... 整段话试这样的,“栈是一种后进先出的数据结构,它只能在末端进行插入和删除元素的操作,所有的函数调用都是通过栈完成的,由于程序员不需要自己来维护栈上面的内存分配任务,所以栈内存又叫自动内存”

我不理解,尤其是我标题写的那句,为什么,先进后出,就决定了函数的调用都是通过栈来完成的吗? 请详细说说
展开
 我来答
wangle11111
2011-02-24 · TA获得超过161个赞
知道小有建树答主
回答量:136
采纳率:0%
帮助的人:135万
展开全部
有2个问题需要澄清:
1.栈是一种后进先出的数据结构,只能在末端进行插入和删除的操作。应该说成是只能在线性表的一端进行插入和删除。说成末端,就认为的把线性表分成开始端和结束端了。但由于线性表中元素只具有线性关系,并没有明确的起始元素和终止元素。
2.函数调用之所以需要栈,是因为函数执行过程中,还能会嵌套调用其他函数,但无论嵌套调用多少个函数,总是要遵循一个原则:后被调用的函数要先运行完毕,程序要回到上一层函数的调用处继续运行,为了实现这个机制,才设计了栈这种后进先出的数据结构。如果把函数调用看成罗餐盘的话,而把当你去盘子的时候,肯定先取走最后一个罗上去的盘子,那么函数运行结束,函数调用返回就相当于你在取盘子。
追问
说的有理,也形象,但是我觉得你举得例子,应该是函数的递归调用情形吧(一个函数里包含另一个函数,而这个又包含了一个函数),那么我这里,比如一个函数里,连续的自上而下的调了3个函数,这个能用栈解释吗,本人新手,希望大侠不吝赐教!
fun0()
{
fun1(){}
fun2(){}
fun3(){}
}
追答
不是递归调用,而是嵌套调用。
另外即使不是嵌套调用,也要用到栈。
也就是说,只要是函数调用就需要栈。把调用入口地址、被调用函数信息(名字,参数,返回值)一起都入栈。
fun0入栈
fun1入栈
fun1出栈
fun2入栈
fun1出栈

fun3入栈
fun3出栈
fun0出栈
wyleon
2011-02-24 · TA获得超过135个赞
知道答主
回答量:140
采纳率:0%
帮助的人:70.9万
展开全部
没听过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式