如何用鏈表實(shí)現(xiàn)棧 順序棧和鏈棧的區(qū)別是什么?
順序棧和鏈棧的區(qū)別是什么?在進(jìn)行空間性能比較時(shí),需要確定一個(gè)固定長(zhǎng)度的序列棧,因此存在存儲(chǔ)單元數(shù)量有限、空間浪費(fèi)等問(wèn)題。鏈堆棧中沒(méi)有堆棧滿問(wèn)題。只有當(dāng)內(nèi)存中沒(méi)有可用空間時(shí),堆棧才會(huì)滿。但是,每個(gè)元素都
順序棧和鏈棧的區(qū)別是什么?
在進(jìn)行空間性能比較時(shí),需要確定一個(gè)固定長(zhǎng)度的序列棧,因此存在存儲(chǔ)單元數(shù)量有限、空間浪費(fèi)等問(wèn)題。
鏈堆棧中沒(méi)有堆棧滿問(wèn)題。只有當(dāng)內(nèi)存中沒(méi)有可用空間時(shí),堆棧才會(huì)滿。但是,每個(gè)元素都需要一個(gè)指針字段,從而導(dǎo)致結(jié)構(gòu)開(kāi)銷。
當(dāng)元素個(gè)數(shù)變化較大時(shí),最好采用鏈?zhǔn)蕉褩#駝t應(yīng)采用順序堆棧。
帶鏈的棧是什么?
其實(shí)鏈棧也是鏈表的一種形式。head指針始終指向列表的第一個(gè)節(jié)點(diǎn)(或head節(jié)點(diǎn)),而top指針始終指向堆棧的頂部。創(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è)元素),這樣,尾部指針就是頂部指針。
為什么棧的頂部是,鏈表的頭?我一直以為是鏈表的尾部?
對(duì)于堆棧,進(jìn)入和退出堆棧是在堆棧的頂部。對(duì)于單鏈表來(lái)說(shuō),在單鏈表的頭部插入或刪除節(jié)點(diǎn)是最方便的。這是其中之一。其次,生成的鏈表中的數(shù)據(jù)元素正好匹配堆棧的特征。先進(jìn)后出。因此,在鏈棧中,棧頂是單鏈表的頭
如果是C,可以用模板實(shí)現(xiàn)。此外,你可能不需要自己寫(xiě)??稍赟TD庫(kù)中找到。
如果是C,有幾種方法。Char比int短,所以可以申請(qǐng)聯(lián)合結(jié)構(gòu)來(lái)存儲(chǔ)它。另一種方法是存儲(chǔ)一個(gè)通用void*并在使用它時(shí)更改其類型。
鏈棧,存儲(chǔ)數(shù)據(jù)的類型定義問(wèn)題要注意什么?
站和隊(duì)列是抽象結(jié)構(gòu),而單鏈表是一個(gè)具體的實(shí)現(xiàn)。通過(guò)鏈表可以實(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
}