棧與系統(tǒng)棧
從計(jì)算機(jī)科學(xué)的角度來看,棧指的是一種數(shù)據(jù)結(jié)構(gòu),是一種先進(jìn)后出的數(shù)據(jù)表。棧的最常見操作有兩種:壓棧(PUSH)、彈棧(POP);用于標(biāo)識(shí)棧的屬性也有兩個(gè):棧頂()、棧底(BASE)
可以把棧想象成一摞撲克牌。
PUSH:為棧增加一個(gè)元素的操作叫做PUSH,相當(dāng)于在這摞撲克牌的最上面再放上一張。
POP:從棧中取出一個(gè)元素的操作叫做POP,相當(dāng)于從這摞撲克牌取出最上面的一張。
:標(biāo)識(shí)棧頂位置,并且是動(dòng)態(tài)變化的。每做一次PUSH操作,它都會(huì)自增1;相反,每做一次POP操作,它會(huì)自減1。棧頂元素相當(dāng)于撲克牌最上面一張,只有這張牌的花色是當(dāng)前可以看到的。
BASE:標(biāo)識(shí)棧底位置,它記錄著撲克牌最下面一張的位置。BASE用于防止棧空后繼續(xù)彈棧(牌發(fā)完時(shí)就不能再去揭牌了)。很明顯,一般情況下,BASE是不會(huì)變動(dòng)的。
內(nèi)存的棧區(qū)實(shí)際上指的就是系統(tǒng)棧。系統(tǒng)棧由系統(tǒng)自動(dòng)維護(hù),它用于實(shí)現(xiàn)高級(jí)語言中函數(shù)的調(diào)用。對(duì)于類似C語言這樣的高級(jí)語言,系統(tǒng)棧的PUSH、POP等堆棧平衡細(xì)節(jié)是透明的。一般說來,只有在使用匯編語言開發(fā)程序的時(shí)候,才需要和它直接打交道。
注意:系統(tǒng)棧在其他文獻(xiàn)中可能曾被叫做運(yùn)行棧、調(diào)用棧等。如果不加特別說明,本書中所述及的棧都是指系統(tǒng)棧這個(gè)概念??荚嚧笳?qǐng)您注意將其與編寫非遞歸函數(shù)求解“八皇后”問題時(shí),在自己程序中所實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)區(qū)分開來。
從計(jì)算機(jī)科學(xué)的角度來看,棧指的是一種數(shù)據(jù)結(jié)構(gòu),是一種先進(jìn)后出的數(shù)據(jù)表。棧的最常見操作有兩種:壓棧(PUSH)、彈棧(POP);用于標(biāo)識(shí)棧的屬性也有兩個(gè):棧頂()、棧底(BASE)
可以把棧想象成一摞撲克牌。
PUSH:為棧增加一個(gè)元素的操作叫做PUSH,相當(dāng)于在這摞撲克牌的最上面再放上一張。
POP:從棧中取出一個(gè)元素的操作叫做POP,相當(dāng)于從這摞撲克牌取出最上面的一張。
:標(biāo)識(shí)棧頂位置,并且是動(dòng)態(tài)變化的。每做一次PUSH操作,它都會(huì)自增1;相反,每做一次POP操作,它會(huì)自減1。棧頂元素相當(dāng)于撲克牌最上面一張,只有這張牌的花色是當(dāng)前可以看到的。
BASE:標(biāo)識(shí)棧底位置,它記錄著撲克牌最下面一張的位置。BASE用于防止棧空后繼續(xù)彈棧(牌發(fā)完時(shí)就不能再去揭牌了)。很明顯,一般情況下,BASE是不會(huì)變動(dòng)的。
內(nèi)存的棧區(qū)實(shí)際上指的就是系統(tǒng)棧。系統(tǒng)棧由系統(tǒng)自動(dòng)維護(hù),它用于實(shí)現(xiàn)高級(jí)語言中函數(shù)的調(diào)用。對(duì)于類似C語言這樣的高級(jí)語言,系統(tǒng)棧的PUSH、POP等堆棧平衡細(xì)節(jié)是透明的。一般說來,只有在使用匯編語言開發(fā)程序的時(shí)候,才需要和它直接打交道。
注意:系統(tǒng)棧在其他文獻(xiàn)中可能曾被叫做運(yùn)行棧、調(diào)用棧等。如果不加特別說明,本書中所述及的棧都是指系統(tǒng)棧這個(gè)概念??荚嚧笳?qǐng)您注意將其與編寫非遞歸函數(shù)求解“八皇后”問題時(shí),在自己程序中所實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)區(qū)分開來。

