鏈表?xiàng):晚樞驐5膮^(qū)別 設(shè)輸入序列為2,3,4,5,6,利用一個(gè)棧能得到序列2,5,3,4,6嗎???梢杂脝捂湵韺?shí)現(xiàn)嗎?
設(shè)輸入序列為2,3,4,5,6,利用一個(gè)棧能得到序列2,5,3,4,6嗎???梢杂脝捂湵韺?shí)現(xiàn)嗎?首先,先2個(gè)堆棧,然后2個(gè)堆棧。使5堆棧第二,3,4堆棧,5堆棧,或3,4,5堆棧(使用后進(jìn)先出),6堆
設(shè)輸入序列為2,3,4,5,6,利用一個(gè)棧能得到序列2,5,3,4,6嗎?棧可以用單鏈表實(shí)現(xiàn)嗎?
首先,先2個(gè)堆棧,然后2個(gè)堆棧。使5堆棧第二,3,4堆棧,5堆棧,或3,4,5堆棧(使用后進(jìn)先出),6堆棧。但此時(shí),6已經(jīng)是堆棧第二,這是矛盾的(書中有例子),所以我們無法得到25346堆棧序列。
堆??梢酝ㄟ^單個(gè)鏈表實(shí)現(xiàn)。您可以在本節(jié)中參考堆棧的鏈接存儲(chǔ)結(jié)構(gòu)及其基本操作的實(shí)現(xiàn)。很明顯,隊(duì)列是一種順序列表,先進(jìn)先出。作為一種數(shù)據(jù)結(jié)構(gòu),堆棧只能在一個(gè)節(jié)中刪除或插入,所以它是先入后出的。關(guān)于隊(duì)列堆棧的概念我沒聽太多,鏈表堆棧(也稱為鏈堆棧)和普通順序堆棧的區(qū)別是“頭刪除”。鏈棧采用單鏈表的形式實(shí)現(xiàn)。每次在鏈表末尾插入和刪除時(shí),都需要遍歷整個(gè)鏈表以找到尾部節(jié)點(diǎn)。在鏈表的頭部進(jìn)行刪除和插入時(shí),只需根據(jù)頭部指針找到鏈表的第一個(gè)元素節(jié)點(diǎn)。隊(duì)列堆棧應(yīng)該以隊(duì)列的形式實(shí)現(xiàn)。隊(duì)列是FIFO。它在表格前面被刪除,在后面被插入。
鏈表,隊(duì)列和棧的區(qū)別?
對(duì)于堆棧,進(jìn)入和退出堆棧是在堆棧的頂部。對(duì)于單鏈表來說,在單鏈表的頭部插入或刪除節(jié)點(diǎn)是最方便的。這是其中之一。其次,生成的鏈表中的數(shù)據(jù)元素正好匹配堆棧的特征。先進(jìn)后出。因此,在鏈棧中,棧頂是單鏈表的頭,站和隊(duì)列是一個(gè)抽象的結(jié)構(gòu),而單鏈表是一個(gè)具體的實(shí)現(xiàn)。通過鏈表可以實(shí)現(xiàn)堆棧和隊(duì)列的操作。
通常,堆?;蜿?duì)列用結(jié)構(gòu)封裝,然后定義一些操作(推送、彈出等)。這里,對(duì)鏈表進(jìn)行具體的操作。例如
結(jié)構(gòu)堆棧{
結(jié)構(gòu)列表{head*head
}
結(jié)構(gòu)隊(duì)列{
結(jié)構(gòu)列表{head*head
結(jié)構(gòu)列表{head*end
}