最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【讀書筆記】數(shù)據(jù)結(jié)構(gòu)與算法之美 第2章 數(shù)組、鏈表、棧和隊列

2022-06-13 21:10 作者:圣斗士-DS-ALGO  | 我要投稿

《數(shù)據(jù)結(jié)構(gòu)與算法之美》,王爭 著

標(biāo)簽:數(shù)據(jù)結(jié)構(gòu)、算法

第2章 數(shù)組、鏈表、棧和隊列

第一部分:數(shù)組

作者在數(shù)組這個小節(jié),本書從工程或應(yīng)用的角度出發(fā)介紹了一些內(nèi)容:

  • ?數(shù)組的定義(這一節(jié)的點評,下面統(tǒng)一說)

  • ?尋址公式和隨機訪問特性:其中特別指出數(shù)組中定位操作的時間復(fù)雜度是O(1),而不是查找操作的時間復(fù)雜度是O(1)。

  • 低效的插入和刪除操作

  • 警惕數(shù)組訪問越界問題。這個內(nèi)容有意思,喜歡動手運行程序的讀者,可以把代碼執(zhí)行一下,看看是否如作者所說。

  • 容器能否完全替代數(shù)組:比較了編程語言提供的容器類和數(shù)組的適用性。

  • 數(shù)據(jù)結(jié)構(gòu)中的數(shù)組和編程語言中的數(shù)組的區(qū)別:作者簡單描述了C/C++、Java和JavaScript三種編程語言中數(shù)組數(shù)據(jù)類型的區(qū)別。

?本節(jié)點評:介紹幾種經(jīng)典編程語言中容器、和數(shù)組數(shù)據(jù)類型的區(qū)別,以及和數(shù)據(jù)結(jié)構(gòu)中數(shù)組的區(qū)別非常好,從工程和應(yīng)用的角度,可以豐富數(shù)據(jù)結(jié)構(gòu)一般教材的不足(一般教材不注重應(yīng)用性),對編程學(xué)習(xí)者,理論和實際都很重要,讓數(shù)據(jù)結(jié)構(gòu)能接地氣。

?文中有段話應(yīng)該是作者的感悟,也是我很喜歡的,推薦給讀者:“數(shù)據(jù)結(jié)構(gòu)和算法的魅力就在于此,很多時候我們并不需要死記硬背某個數(shù)據(jù)結(jié)構(gòu)或算法,而是要學(xué)習(xí)其背后的思想和處理技巧,這些東西才是最有價值的。如果讀者細心留意,就會發(fā)現(xiàn),無論是在軟件開發(fā)還是架構(gòu)設(shè)計中,總能找到數(shù)據(jù)結(jié)構(gòu)和算法的影子”

?下面我表達一下個人的觀點

數(shù)組這個詞,在數(shù)據(jù)結(jié)構(gòu)、算法、和程序設(shè)計、編程軟件開發(fā)這些領(lǐng)域中,經(jīng)常出現(xiàn),大家對數(shù)組的理解一般都不會有大的出錯,但是這個詞因為歷史悠久且應(yīng)用廣泛,如果不搞清楚,對喜歡探究的初學(xué)者來說,為有一些困擾。

如果只是“數(shù)組”這個詞,它代表了太多東西,要學(xué)習(xí)和理解數(shù)組,其實要加上很多前提約束,這樣初學(xué)者就不會那么困惑了。

?在數(shù)據(jù)結(jié)構(gòu)領(lǐng)域里,線性結(jié)構(gòu)是一種邏輯數(shù)據(jù),線性表、棧和隊列是具有線性結(jié)構(gòu)的抽象數(shù)據(jù)類型(抽象在這里強調(diào)的數(shù)據(jù)集的結(jié)構(gòu)關(guān)系)。在數(shù)據(jù)結(jié)構(gòu)領(lǐng)域,數(shù)組是一種物理數(shù)據(jù)結(jié)構(gòu)(物理在這里表示的是計算機可以支持或?qū)崿F(xiàn)的結(jié)構(gòu)),線性表可以基于數(shù)組來實現(xiàn)。

?在程序設(shè)計領(lǐng)域中,數(shù)組表示一組連續(xù)的內(nèi)存空間存儲具有相同類型的數(shù)據(jù)。在不同的編程語言中真的實現(xiàn)數(shù)組數(shù)據(jù)類型時,由于編程語言設(shè)計的理念不同,不同編程語言中的數(shù)組數(shù)據(jù)類型是不同的,也不是完全遵循數(shù)據(jù)結(jié)構(gòu)中的數(shù)組這個概念。而且隨著編程語言的發(fā)展,還出現(xiàn)了容器,容器可以說是抽象數(shù)據(jù)類型的實例化。利用C++ STL中的vector,可以認(rèn)為是線性表這種抽象數(shù)據(jù)類型的理念在C++中的實例化(不是數(shù)組的實例化)。

?理解了程序設(shè)計(編程語言)中數(shù)組和數(shù)據(jù)結(jié)構(gòu)中線性表(數(shù)組)的區(qū)別,

那么在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)線性結(jié)構(gòu)部分時,為什么在數(shù)組中插入和刪除操作效率低,就不難理解了。如果在程序設(shè)計領(lǐng)域,在數(shù)組中插入一個新的元素(刪除一個元素),完全可以在O(1)的時間復(fù)雜度的方法實現(xiàn)。但是在數(shù)據(jù)結(jié)構(gòu)領(lǐng)域,線性表或數(shù)組(這兩個詞,在很多數(shù)據(jù)結(jié)構(gòu)教材中有點混用)因為要維持?jǐn)?shù)據(jù)集中的線性結(jié)構(gòu)特性,在插入和刪除時才需要移動部分元素的位置。

簡單說,如果只是程序設(shè)計中的數(shù)組,插入元素或刪除數(shù)組中的某個元素,是不需要移動其他元素的。但是如果是用程序設(shè)計編程語言的數(shù)組來實現(xiàn)線性表(或數(shù)組),那么,插入和刪除時才需要移動部分元素的位置。當(dāng)然這都是理論上的(或者稱為思想上的),到了具體的編程語言,程序設(shè)計中的數(shù)組理念,不同的編程語言可以針對編程語言自身的特點,進行相應(yīng)的調(diào)整,實現(xiàn)出不同的數(shù)組數(shù)據(jù)類型;數(shù)據(jù)結(jié)構(gòu)中的線性表(數(shù)組)理念,不同的編程語言可以實現(xiàn)出不同的數(shù)據(jù)類型或容器。

?二、鏈表

作者在鏈表這個小節(jié),從工程或應(yīng)用的角度出發(fā)介紹了一些內(nèi)容:

  • 鏈表的底層結(jié)構(gòu):數(shù)組和鏈表的底層結(jié)構(gòu)區(qū)別

  • 鏈表的定義和操作

  • 鏈表的變形結(jié)構(gòu):單鏈表、循環(huán)鏈表、雙向鏈表

  • 鏈表和數(shù)組的性能對比

  • 基于鏈表實現(xiàn)LRU緩存淘汰算法

  • 作者總結(jié)了6個編寫鏈表相關(guān)代碼的技巧。這一部分重點推薦。具體內(nèi)容就不劇透了。

?三、棧

作者在棧這個小節(jié),從工程或應(yīng)用的角度出發(fā)介紹了一些內(nèi)容:

  • l棧的定義

  • 順序棧和鏈?zhǔn)綏?/p>

  • 支持動態(tài)擴容的順序棧

  • 棧在函數(shù)調(diào)用中的應(yīng)用

  • 棧在表達式求值中的應(yīng)用

  • 棧在括號匹配中的應(yīng)用

  • 如何用棧實現(xiàn)瀏覽器的前進、后退功能

?四、隊列

作者在隊列這個小節(jié),從工程或應(yīng)用的角度出發(fā)介紹了一些內(nèi)容:

  • 隊列的定義

  • 順序隊列和鏈?zhǔn)疥犃?/p>

  • 循環(huán)隊列

  • 阻塞隊列和并發(fā)隊列

  • 線程池如何處理請求一個線程

?一般的數(shù)據(jù)結(jié)構(gòu)教材中,棧和隊列都說很重要,但是,本書作者在棧和隊列部分介紹了很多應(yīng)用的場景,雖然篇幅和細節(jié)不多,但是對于初學(xué)者來說,開拓視野,以及比簡單地說教棧和隊列很有用很常用要更加打動讀者。

?


【讀書筆記】數(shù)據(jù)結(jié)構(gòu)與算法之美 第2章 數(shù)組、鏈表、棧和隊列的評論 (共 條)

分享到微博請遵守國家法律
马尔康县| 南阳市| 多伦县| 陆川县| 衡山县| 淮阳县| 额尔古纳市| 绵竹市| 太康县| 贵德县| 南华县| 揭阳市| 汝阳县| 阜平县| 九龙坡区| 湖口县| 勃利县| 疏附县| 蒙山县| 平潭县| 台南县| 石首市| 车致| 忻城县| 新绛县| 江口县| 六盘水市| 太白县| 准格尔旗| 南澳县| 弥渡县| 苏尼特右旗| 奉节县| 台中县| 兴化市| 梧州市| 宁化县| 北流市| 莱阳市| 东源县| 三穗县|