簡要說明棧和隊(duì)列的異同點(diǎn) 數(shù)據(jù)結(jié)構(gòu)隊(duì)列優(yōu)點(diǎn)?
在數(shù)據(jù)結(jié)構(gòu)中,隊(duì)列以FIFO為特征。Queue是一個(gè)特殊的線性表,它的獨(dú)特之處在于只允許在表的前面刪除,在表的后面插入。和stack一樣,邏輯特征:隊(duì)列先進(jìn)先出,堆棧先進(jìn)先出,共同點(diǎn):從Stack是一
在數(shù)據(jù)結(jié)構(gòu)中,隊(duì)列以FIFO為特征。
Queue是一個(gè)特殊的線性表,它的獨(dú)特之處在于只允許在表的前面刪除,在表的后面插入。和stack一樣,
邏輯特征:隊(duì)列先進(jìn)先出,堆棧先進(jìn)先出,共同點(diǎn):從
Stack是一個(gè)線性表,僅限于在表的一端進(jìn)行插入和刪除操作,稱為棧頂和棧底。當(dāng)表中沒有元素時(shí),清空堆棧。棧的修改是基于后進(jìn)先出的原則,我們也叫棧LIFO表。通常,棧有兩種存儲(chǔ)結(jié)構(gòu):順序棧和鏈?zhǔn)綏!6褩S辛N基本操作:
構(gòu)造一個(gè)空堆棧:init stack判斷堆棧為空:stack判斷堆棧為空:stack full進(jìn)入堆棧:Push退出堆棧:Pop取堆棧的頂部元素:StackTop在順序堆棧中有#34溢出#34和#34下溢。
#34溢出# 34是堆棧的頂部指針,指示堆棧外部處于錯(cuò)誤狀態(tài)。
#34下溢# 34可以表示堆棧為空,因此它被用作控制轉(zhuǎn)移的條件。順序堆棧中有六種基本操作:
構(gòu)造空棧,判斷空棧,判斷滿棧,入棧,回棧,取棧頂元素鏈棧都沒有溢出限制,所以don 進(jìn)入堆棧時(shí),不要判斷堆棧是否已滿。
鏈棧不需要在頭上附加頭節(jié)點(diǎn),只要有一個(gè)指向鏈表的頭指針。鏈棧中有五種基本操作:
構(gòu)造空棧,判斷空棧,入棧,回棧,取頂元素隊(duì)列是一個(gè)有限操作的線性表,在表的一端插入,另一端刪除。允許刪除的一端稱為隊(duì)列的前端,允許插入的一端稱為隊(duì)列的后端。隊(duì)列的工作原理是先進(jìn)先出,也叫FIFO表。隊(duì)列也有兩種存儲(chǔ)結(jié)構(gòu):順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)。隊(duì)列有六種基本操作:
清空隊(duì)列:初始化隊(duì)列(Q)判斷隊(duì)列空:隊(duì)列空(Q)判斷隊(duì)列滿:隊(duì)列滿(Q)進(jìn)入隊(duì)列:入隊(duì)(Q,x)出列:出列(Q)取隊(duì)列頭元素:QueueFront(Q)順序隊(duì)列#34假溢出#34現(xiàn)象:
此時(shí)整個(gè)向量空間和隊(duì)列都是空的,但是出現(xiàn)了#34溢出#34的現(xiàn)象。。為了克服#34假溢出#34的現(xiàn)象,引入了循環(huán)向量的概念。向量空間形成一個(gè)首尾相連的環(huán),該隊(duì)列稱為循環(huán)隊(duì)列。有三種方法可以確定循環(huán)隊(duì)列是空的還是滿的:
一種是設(shè)置另一個(gè)布爾變量進(jìn)行判斷;
二是少用一個(gè)元素空間,在組隊(duì)前測試((后1)%m前)?滿:空;
第三種方法是使用計(jì)數(shù)器記錄隊(duì)列中元素的總數(shù)。隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)稱為鏈?zhǔn)疥?duì)列,鏈?zhǔn)疥?duì)列是一個(gè)具有有限操作的單鏈表。為了方便表尾的插入(排隊(duì))操作,在表尾增加一個(gè)尾指針,鏈隊(duì)列由頭指針和尾指針唯一確定。鏈?zhǔn)疥?duì)列不存在滿隊(duì)列和溢出的問題。在鏈?zhǔn)疥?duì)列的出列算法中,需要注意的是,當(dāng)原隊(duì)列只有一個(gè)節(jié)點(diǎn)時(shí),出列后要一起修改頭指針和尾指針,隊(duì)列要為空。