函數(shù)調(diào)用棧圖解 為什么常用于函數(shù)調(diào)用的數(shù)據(jù)結(jié)構(gòu)是棧而不是隊(duì)列?
為什么常用于函數(shù)調(diào)用的數(shù)據(jù)結(jié)構(gòu)是棧而不是隊(duì)列?堆棧的先進(jìn)先出操作序列適用于函數(shù)的嵌套調(diào)用,而隊(duì)列的先進(jìn)先出操作序列不適用。例如:(棧的操作在棧頂完成)main函數(shù)調(diào)用一個(gè)函數(shù),字段參數(shù)按棧,棧結(jié)構(gòu):[
為什么常用于函數(shù)調(diào)用的數(shù)據(jù)結(jié)構(gòu)是棧而不是隊(duì)列?
堆棧的先進(jìn)先出操作序列適用于函數(shù)的嵌套調(diào)用,而隊(duì)列的先進(jìn)先出操作序列不適用。例如:(棧的操作在棧頂完成)main函數(shù)調(diào)用一個(gè)函數(shù),字段參數(shù)按棧,棧結(jié)構(gòu):[[top of stack][call a site][bottom of stack
在a函數(shù)調(diào)用B函數(shù)后:[[top of stack][call B site][call a site][bottom of stack
從B返回時(shí),堆棧的頂部可以獲取剛剛進(jìn)入堆棧的[call B site]參數(shù)。當(dāng)從返回時(shí),[call a site]參數(shù)返回到堆棧的頂部并準(zhǔn)確地使用。如果它是一個(gè)隊(duì)列,則如下所示:[[queue entry][call B site][call a site][queue exit
從B返回時(shí),隊(duì)列出口處的[call a site]參數(shù)不適用,因此堆棧結(jié)構(gòu)適用于嵌套調(diào)用這些算法的數(shù)據(jù)結(jié)構(gòu)用于分析和循環(huán)。