??梢栽谑裁粗袘?yīng)用 棧和鏈表是兩種不同的數(shù)據(jù)結(jié)構(gòu)嗎?
棧和鏈表是兩種不同的數(shù)據(jù)結(jié)構(gòu)嗎?堆棧是兩種不同的數(shù)據(jù)結(jié)構(gòu)。書(shū)堆是“先進(jìn)后出”,相當(dāng)于一盒書(shū)。第一個(gè)放在下面,最后一個(gè)放在上面,這也是第一個(gè)拿出來(lái)的。最上面的書(shū)所在的地方也叫書(shū)堆的頂部。鏈表是一種順序結(jié)
棧和鏈表是兩種不同的數(shù)據(jù)結(jié)構(gòu)嗎?
堆棧是兩種不同的數(shù)據(jù)結(jié)構(gòu)。書(shū)堆是“先進(jìn)后出”,相當(dāng)于一盒書(shū)。第一個(gè)放在下面,最后一個(gè)放在上面,這也是第一個(gè)拿出來(lái)的。最上面的書(shū)所在的地方也叫書(shū)堆的頂部。鏈表是一種順序結(jié)構(gòu),由若干組組成。不同之處在于鏈表是由一系列頂點(diǎn)組成的,每個(gè)頂點(diǎn)都包含自己的信息,信息總和和下一個(gè)頂點(diǎn)之間的鏈接(指針字段)可以隨時(shí)添加或刪除。可以隨意插入站點(diǎn)和隊(duì)列。它是一個(gè)抽象的結(jié)構(gòu),而單鏈表是一個(gè)具體的實(shí)現(xiàn)。通過(guò)鏈表可以實(shí)現(xiàn)堆棧和隊(duì)列的操作。
通常,堆棧或隊(duì)列用結(jié)構(gòu)封裝,然后定義一些操作(推送、彈出等)。這里,對(duì)鏈表進(jìn)行具體的操作。例如
struct stack{
struct listuuuhead*head
}
struct queue{
struct listuuuhead*head
定義鏈棧和單鏈表這兩種數(shù)據(jù)結(jié)構(gòu)有什么區(qū)別啊?我覺(jué)得鏈棧就是給單鏈表改了個(gè)結(jié)構(gòu)體名稱(chēng)而已。在具體函?
queue是一種排序表,先進(jìn)先出。作為一種數(shù)據(jù)結(jié)構(gòu),堆棧只能在一個(gè)節(jié)中刪除或插入,所以它是先入后出的。關(guān)于隊(duì)列堆棧的概念我沒(méi)聽(tīng)太多,鏈表堆棧(也稱(chēng)為鏈堆棧)和普通順序堆棧的區(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ū)別?
list(列表)中的元素是不是先進(jìn)先出?
鏈堆棧實(shí)際上是一種形式在鏈表中,頭指針始終指向表的第一個(gè)節(jié)點(diǎn)(或頭節(jié)點(diǎn)),堆棧頂部指針始終指向堆棧頂部。創(chuàng)建鏈表通常有兩種方法:一種是頭插入法,另一種是尾插入法。鏈堆棧也是如此。假設(shè)創(chuàng)建的堆棧沒(méi)有頭節(jié)點(diǎn),即第一個(gè)節(jié)點(diǎn)開(kāi)始存儲(chǔ)數(shù)據(jù)。當(dāng)使用head插入方法構(gòu)建堆棧時(shí),head指針是頂部指針。兩者沒(méi)有區(qū)別。當(dāng)使用尾部插入方法構(gòu)建堆棧時(shí),頭部指針不是頂部指針。此時(shí),在構(gòu)建堆棧時(shí),我們需要定義一個(gè)尾部指針來(lái)始終指向堆棧的最后一個(gè)元素(即最后一個(gè)元素),這樣,尾部指針就是頂部指針。