如何理解"栈是一种后进先出的数据结构,只能在末端进行插入和删除的操作,所有的函数调用都是通过栈完成的
整段话试这样的,“栈是一种后进先出的数据结构,它只能在末端进行插入和删除元素的操作,所有的函数调用都是通过栈完成的,由于程序员不需要自己来维护栈上面的内存分配任务,所以栈...
整段话试这样的,“栈是一种后进先出的数据结构,它只能在末端进行插入和删除元素的操作,所有的函数调用都是通过栈完成的,由于程序员不需要自己来维护栈上面的内存分配任务,所以栈内存又叫自动内存”
我不理解,尤其是我标题写的那句,为什么,先进后出,就决定了函数的调用都是通过栈来完成的吗? 请详细说说 展开
我不理解,尤其是我标题写的那句,为什么,先进后出,就决定了函数的调用都是通过栈来完成的吗? 请详细说说 展开
展开全部
有2个问题需要澄清:
1.栈是一种后进先出的数据结构,只能在末端进行插入和删除的操作。应该说成是只能在线性表的一端进行插入和删除。说成末端,就认为的把线性表分成开始端和结束端了。但由于线性表中元素只具有线性关系,并没有明确的起始元素和终止元素。
2.函数调用之所以需要栈,是因为函数执行过程中,还能会嵌套调用其他函数,但无论嵌套调用多少个函数,总是要遵循一个原则:后被调用的函数要先运行完毕,程序要回到上一层函数的调用处继续运行,为了实现这个机制,才设计了栈这种后进先出的数据结构。如果把函数调用看成罗餐盘的话,而把当你去盘子的时候,肯定先取走最后一个罗上去的盘子,那么函数运行结束,函数调用返回就相当于你在取盘子。
1.栈是一种后进先出的数据结构,只能在末端进行插入和删除的操作。应该说成是只能在线性表的一端进行插入和删除。说成末端,就认为的把线性表分成开始端和结束端了。但由于线性表中元素只具有线性关系,并没有明确的起始元素和终止元素。
2.函数调用之所以需要栈,是因为函数执行过程中,还能会嵌套调用其他函数,但无论嵌套调用多少个函数,总是要遵循一个原则:后被调用的函数要先运行完毕,程序要回到上一层函数的调用处继续运行,为了实现这个机制,才设计了栈这种后进先出的数据结构。如果把函数调用看成罗餐盘的话,而把当你去盘子的时候,肯定先取走最后一个罗上去的盘子,那么函数运行结束,函数调用返回就相当于你在取盘子。
追问
说的有理,也形象,但是我觉得你举得例子,应该是函数的递归调用情形吧(一个函数里包含另一个函数,而这个又包含了一个函数),那么我这里,比如一个函数里,连续的自上而下的调了3个函数,这个能用栈解释吗,本人新手,希望大侠不吝赐教!
fun0()
{
fun1(){}
fun2(){}
fun3(){}
}
追答
不是递归调用,而是嵌套调用。
另外即使不是嵌套调用,也要用到栈。
也就是说,只要是函数调用就需要栈。把调用入口地址、被调用函数信息(名字,参数,返回值)一起都入栈。
fun0入栈
fun1入栈
fun1出栈
fun2入栈
fun1出栈
fun3入栈
fun3出栈
fun0出栈
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询