棧和隊(duì)列各有什么特點(diǎn) 什么情況下用到棧?
什么情況下用到棧?堆??捎糜谠谡{(diào)用函數(shù)時(shí)存儲(chǔ)斷點(diǎn)。執(zhí)行遞歸時(shí)使用堆棧!首先,讀取系統(tǒng)或數(shù)據(jù)結(jié)構(gòu)堆棧中的數(shù)據(jù)內(nèi)容不同于(push和pop)!插入是添加數(shù)據(jù),彈出是刪除數(shù)據(jù),這些操作只能從棧頂開始,即以最
什么情況下用到棧?
堆棧可用于在調(diào)用函數(shù)時(shí)存儲(chǔ)斷點(diǎn)。執(zhí)行遞歸時(shí)使用堆棧
!首先,讀取系統(tǒng)或數(shù)據(jù)結(jié)構(gòu)堆棧中的數(shù)據(jù)內(nèi)容不同于(push和pop)!插入是添加數(shù)據(jù),彈出是刪除數(shù)據(jù),這些操作只能從棧頂開始,即以最低地址作為約束接口,但讀取棧中的數(shù)據(jù)是任意的,沒有接口約束。很多人誤解了這個(gè)想法,對(duì)這堆東西感到困惑。[1] 計(jì)算機(jī)體系結(jié)構(gòu)中的系統(tǒng)棧還起著跨組件交互介質(zhì)區(qū)的作用,即CPU與內(nèi)存之間的通信通道。CPU只從系統(tǒng)為我們自己的應(yīng)用程序指定的堆棧入口線性地讀取執(zhí)行指令,并使用一個(gè)圖像字將其描述為流水線。CPU的內(nèi)部交互請(qǐng)參考EU和BIU的概念介紹。
作為一種數(shù)據(jù)結(jié)構(gòu),堆棧是一種特殊的線性表,只能在一端插入和刪除。它按照后進(jìn)先出的原則存儲(chǔ)數(shù)據(jù)。第一個(gè)數(shù)據(jù)被推入堆棧的底部,最后一個(gè)數(shù)據(jù)在堆棧的頂部。當(dāng)它需要讀取數(shù)據(jù)時(shí),它開始從堆棧頂部彈出數(shù)據(jù)(最后一個(gè)數(shù)據(jù)首先被讀?。?。堆棧具有內(nèi)存功能,因此在插入和刪除堆棧的操作中不需要更改底部指針。
堆棧是一個(gè)特殊的線性表,允許在同一端進(jìn)行插入和刪除操作。允許插入和刪除的一端稱為頂部,另一端稱為底部。堆棧的底部是固定的,而頂部是浮動(dòng)的。當(dāng)堆棧中的元素?cái)?shù)為零時(shí),稱為空堆棧。Insert通常稱為push,delete稱為pop。堆棧也被稱為后進(jìn)先出表。
調(diào)用函數(shù)時(shí),堆??捎糜诖鎯?chǔ)斷點(diǎn)。執(zhí)行遞歸時(shí)使用堆棧
!上述定義在經(jīng)典計(jì)算機(jī)科學(xué)中進(jìn)行了解釋。
在計(jì)算機(jī)系統(tǒng)中,堆棧是具有上述屬性的動(dòng)態(tài)內(nèi)存區(qū)域。程序可以將數(shù)據(jù)推入堆?;驈亩褩m敳繌棾鰯?shù)據(jù)。在i386機(jī)器中,棧頂由一個(gè)名為esp的寄存器定位。棧壓操作使棧頂?shù)刂窚p少,而彈出操作使棧頂?shù)刂吩黾印?/p>
堆棧在程序運(yùn)行中起著重要作用。最重要的是堆棧存儲(chǔ)了函數(shù)調(diào)用所需的維護(hù)信息,通常稱為堆棧幀或活動(dòng)記錄。堆棧幀通常包含以下信息:
1。函數(shù)的返回地址和參數(shù)
2。臨時(shí)變量:包括函數(shù)的非靜態(tài)局部變量和編譯器自動(dòng)生成的其他臨時(shí)變量。