发布网友 发布时间:2022-03-31 03:45
共2个回答
热心网友 时间:2022-03-31 05:15
有2个问题需要澄清:
1.栈是一种后进先出的数据结构,只能在末端进行插入和删除的操作。应该说成是只能在线性表的一端进行插入和删除。说成末端,就认为的把线性表分成开始端和结束端了。但由于线性表中元素只具有线性关系,并没有明确的起始元素和终止元素。
2.函数调用之所以需要栈,是因为函数执行过程中,还能会嵌套调用其他函数,但无论嵌套调用多少个函数,总是要遵循一个原则:后被调用的函数要先运行完毕,程序要回到上一层函数的调用处继续运行,为了实现这个机制,才设计了栈这种后进先出的数据结构。如果把函数调用看成罗餐盘的话,而把当你去盘子的时候,肯定先取走最后一个罗上去的盘子,那么函数运行结束,函数调用返回就相当于你在取盘子。追问说的有理,也形象,但是我觉得你举得例子,应该是函数的递归调用情形吧(一个函数里包含另一个函数,而这个又包含了一个函数),那么我这里,比如一个函数里,连续的自上而下的调了3个函数,这个能用栈解释吗,本人新手,希望大侠不吝赐教!
fun0()
{
fun1(){}
fun2(){}
fun3(){}
}
追答不是递归调用,而是嵌套调用。
另外即使不是嵌套调用,也要用到栈。
也就是说,只要是函数调用就需要栈。把调用入口地址、被调用函数信息(名字,参数,返回值)一起都入栈。
fun0入栈
fun1入栈
fun1出栈
fun2入栈
fun1出栈
fun3入栈
fun3出栈
fun0出栈
热心网友 时间:2022-03-31 06:33
没听过