用鏈表實(shí)現(xiàn)棧 c 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)應(yīng)不應(yīng)該用stl實(shí)現(xiàn)?
c 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)應(yīng)不應(yīng)該用stl實(shí)現(xiàn)?學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),根據(jù)教師的意愿和學(xué)校的培訓(xùn)計(jì)劃,應(yīng)該由自己來(lái)實(shí)現(xiàn),而不是調(diào)用現(xiàn)成的STL。因?yàn)镾TL是一種很好的數(shù)據(jù)結(jié)構(gòu):鏈表、數(shù)組、隊(duì)列、堆棧、集合、雙端隊(duì)列、
c 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)應(yīng)不應(yīng)該用stl實(shí)現(xiàn)?
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),根據(jù)教師的意愿和學(xué)校的培訓(xùn)計(jì)劃,應(yīng)該由自己來(lái)實(shí)現(xiàn),而不是調(diào)用現(xiàn)成的STL。
因?yàn)镾TL是一種很好的數(shù)據(jù)結(jié)構(gòu):鏈表、數(shù)組、隊(duì)列、堆棧、集合、雙端隊(duì)列、哈希數(shù)組。
自我實(shí)現(xiàn)是根據(jù)數(shù)據(jù)結(jié)構(gòu)理論定義mylist、myArray、myqueue、mystack、mydeque、myset、myhashset等。
數(shù)據(jù)結(jié)構(gòu)已經(jīng)告訴您這些類應(yīng)該如何組織內(nèi)存以及它們應(yīng)該提供什么操作接口。這是你的工作。
但是,如果老師要求您完成作業(yè)或小項(xiàng)目,最好使用您之前定義的課程。如果沒(méi)有,則調(diào)用現(xiàn)有的STL來(lái)完成這些項(xiàng)目,這表明您已經(jīng)理解了數(shù)據(jù)結(jié)構(gòu)的原理和本質(zhì)。而且會(huì)靈活運(yùn)用,這次用STL是可以理解的,也意味著你對(duì)書本不滿意,會(huì)主動(dòng)去學(xué)習(xí)和實(shí)踐別人的好容器。這說(shuō)明你有很強(qiáng)的主動(dòng)學(xué)習(xí)和應(yīng)用能力。
所以,總的來(lái)說(shuō),你是否使用STL取決于老師作業(yè)的內(nèi)容:
1當(dāng)你實(shí)現(xiàn)一個(gè)數(shù)據(jù)結(jié)構(gòu)時(shí),當(dāng)然,你可以自己實(shí)現(xiàn)它
2當(dāng)你完成一個(gè)相對(duì)復(fù)雜的任務(wù)時(shí),你可以調(diào)用現(xiàn)成的。如果你能自己打電話實(shí)施,老師當(dāng)然會(huì)很滿意的。
鏈棧的設(shè)計(jì)與實(shí)現(xiàn)?
使用數(shù)組:優(yōu)點(diǎn):數(shù)據(jù)連續(xù)存儲(chǔ)在堆棧區(qū),比堆棧區(qū)不連續(xù)存儲(chǔ)更方便緩存,速度明顯更快;另外,數(shù)組是高級(jí)語(yǔ)言語(yǔ)法中的基本類型,結(jié)構(gòu)簡(jiǎn)單,有利于編譯器做寄存器優(yōu)化,不斷折疊、無(wú)用代碼簡(jiǎn)化等,優(yōu)化速度更快。R缺點(diǎn):數(shù)組大小在編譯時(shí)是死的(C99有變量數(shù)組,但VC不支持,C與之不兼容)。只能在數(shù)組打開時(shí)存儲(chǔ)盡可能多的數(shù)據(jù),如果超出限制,則超出范圍。另外,??臻g非常寶貴,數(shù)組結(jié)構(gòu)所能存儲(chǔ)的數(shù)據(jù)量明顯少于鏈表結(jié)構(gòu)。這就注定了陣列封裝的棧不能應(yīng)用于工程實(shí)踐。R使用鏈表:優(yōu)點(diǎn)和缺點(diǎn)就在上面,反之亦然。實(shí)際工程中的解決方案:cstl(可以說(shuō)是算法和數(shù)據(jù)結(jié)構(gòu)模板庫(kù)中的基準(zhǔn))默認(rèn)使用兩個(gè)終端隊(duì)列來(lái)封裝棧。雙端隊(duì)列的底層由幾個(gè)不連續(xù)的緩沖區(qū)組成,但每個(gè)緩沖區(qū)的內(nèi)部元素是連續(xù)的。這樣可以減少內(nèi)存分配的次數(shù),減少內(nèi)存碎片,提高緩存命中率,可以說(shuō)是數(shù)組和鏈表的優(yōu)點(diǎn)的結(jié)合。隊(duì)列是一種排序表,先進(jìn)先出。作為一種數(shù)據(jù)結(jié)構(gòu),堆棧只能在一個(gè)節(jié)中刪除或插入,所以它是先入后出的。關(guān)于隊(duì)列堆棧的概念我沒(méi)聽(tī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。它在表格前面被刪除,在后面被插入。