別人總結的學習資料結構的經驗

2021-08-11 06:40:19 字數 3955 閱讀 7056

最近想了一下,沒有講詳細一點的學習方法。從第26,作第一次更新。

學習方法:我認為任何資料結構都可以從線性表演進而來。以順序表為例,最簡單的順序表是無序的,那麼增加乙個要求,使其是有序的,那麼只需要改動一下插入操作。

依理類推,堆疊和佇列,只需要改動插入和刪除操作,即可。你看科研**或實際專案,也是有乙個較簡單的資料結構,演變而來。

陣列,結構稍有變動,操作也是增加得多一些,例如:回文。

樹:結構改得較大,有分支了。性質也多一些。最基本的操作方法,是查詢。

圖:當然最複雜。各種需求。

因此:線性表---->樹---->圖。這是一種演進路徑。

線性表--->堆疊、佇列、串--->陣列--->各種線性表;

二叉樹--->各種二叉樹---->b樹、b+樹---->紅黑樹;

混合使用。

依理類推。線性表是最簡單的,從線性表可以逐漸演進出其它的資料結構。

每個大類結構,都可以從基本的結構逐漸增加要求,從而演進出其它的結構來。

不邀自來。

這個問題提得很好,好就好在「本質」兩個字。

資料結構的本質就在於:如何將現實世界中各種各樣的資料放入到記憶體中,並且如何在記憶體中操作這些資料,如何評價這些儲存方案和操作方法。

資料結構難學嗎?是難學。

為什麼難學?一開始上來就講空間複雜度、時間複雜度,就講抽象資料,當然難學了。

1、生活、生產等現實世界的資料有各種各樣的組成形式。例如乙個課程的所有學生的成績(一組資料),乙個班全部學生的所有課程的成績(一張表)、乙個單位的人員結構(樹)等等。

2、這些資料都要先載入到記憶體中,再送到cpu中進行計算。

3、記憶體的最基本單位叫做儲存單元,乙個位元組(不討論理論中的、個別情況的)。儲存單元相當於乙個空盒子,可以放置資料。為了便於管理,盒子會給乙個編號,當然儲存單元也會有編號,其實就是位址。理論上位址的方案可以有多種(計算機組成原理和作業系統的任務),不過對於程式設計師來說,這些都跟我們無關,為了簡單起見,我們把儲存單元的編號(位址)都編成0、1、2、3、4,......這樣的,於是這些編號或位址的取值範圍,我們就稱位址空間。這個位址空間,跟一維座標軸一樣,所以是一維線性空間

4、很明顯,資料就是乙個個放入到這些儲存單元中,就象我們把乙個單位的物品放入盒子一樣。現在,假設乙個盒子只能裝入乙個單位的物品。因而,乙個儲存單元也只能放入乙個單位的資料。

5、接下來,假設說,我們有很多很多的空盒子(x個)。有一天,我們要將若干單位物品(n個)放入盒子中,那麼我們可以在乙個盒子放入乙個單位物品。依此類推,我們可以在乙個儲存單元中放置乙個單位的資料。

6、再接下來,我們有兩種放置方案:乙個挨乙個地連續地放置物品;當然,也可以不連續地放置物品。依此類推,在記憶體當中放置資料,也有兩種方案,連續地放置資料,或者不連續地放置資料。為什麼會有不連續的放置方案呢?原因很簡單,乙個主要的原因是,記憶體的空間利用率高,碎片少(作業系統的儲存管理的知識,且不用理會),刪除舊有的資料很容易(這個是資料結構的內容)。

7、現在,可以把這兩個將資料放入到儲存單元的方案叫做物理儲存。對連續物理儲存方案來說,事情比較好辦,通過編號(索引、下標)就可以找到物品,對於不連續的方案,那麼我們就要在乙個物品上面標記下乙個物品的位置,這個標記就是下乙個物品的位址(指標)。當然,在計算機中,指標的記錄本身也要占用記憶體的儲存單元,所以我們在c語言中用結構體把資料和指標組織成為乙個單位。通過這個指向關係,我們可以在不連續的放置方案中依次地查詢我們所需要的東西(物品或資料)。

8、接下來,就象我們經常進行從盒子當中查詢物品、取用物品或增加物品等操作一樣,我們也要進行從記憶體當中查詢資料、取用(刪除)資料或增加資料等操作。那麼,對於不同的物理儲存方案來說,其方法是不一樣的。這個想一想,我們如何對付真實的物品,我們就如何對付記憶體中的資料。這就是資料的物理儲存方案的資料操作

9、好了,搞懂這些,字串之類的知識點就不難了。

11、是不是只有物理儲存結構(方案)就可以了呢?在第1條中說過,現實當中的資料是有各種各樣的結構的。而在第10條,我們強調了物理放置方案只有2種:連續的和不連續的。

12、於是就產生乙個問題,如何將現實世界當中的關係各種各樣的資料放入到記憶體之中。

13、解決第12條中的問題,我們可以分兩步走,第1步是將現實世界的資料組織成為邏輯結構,第2步再把邏輯結構的資料對映到物理結構中

14、顯然,在第1步中,我們拋去資料的其它屬性,只留下資料的兩個屬性就可以了:乙個屬性是資料的值,另乙個屬性就是資料之間的關係。這兩個屬性就得到乙個邏輯結構:graph(圖),這就是離散數學中的圖論。那麼,這就是科學家的事情,他們負責針對具體的問題,將現實世界的資料構造出對應的graph(圖)。

15、在第2步中,我們要做的事情,把這個graph對映到物理儲存結構中,這就是資料結構要做的事情了。顯然,我們可以用陣列來儲存,也可以用鍊錶來儲存,回憶一下最短路徑演算法的兩個做法。ps.,二維陣列、三維陣列也是乙個連續儲存的結構,在c語言debug下,看看位址就知道了。那麼,不連續的儲存結構,也就是鍊錶,當然有很多的衍生:雙向鍊錶、十字鍊錶、等等。

16、顯然,不管現實世界中的資料之間的關係如何,我們都可以用graph來描述,只不過是,不同的資料關係有不同的結構而已,比如:樹、森林、mesh,等等。

17、當然,我們要掌握一些常見的graph的操作方法,最主要就是搜尋方法。而且還要注意,這些方法是分兩個層次的,乙個物理儲存結構這個層次,乙個是邏輯儲存結構這個層次的。那麼現在,深度優先搜尋、廣度優先搜尋是哪個層次呢?

18、當然,我們還要掌握一下儲存結構的壓縮。

19、到了這個時候,我們還要問一下,各種方案的優劣性質如何,也就是空間複雜度和時間複雜度了。

20、當然,我們這個時候,還要進一步的問一問,能不能將這些邏輯結構給出乙個統一的描述,那麼,就是抽象資料了。

21、當然,我們還要掌握邏輯儲存結構的各種樹的優化,特別是針對不同的應用,比如紅黑樹、b樹。

22、當然,我們最後還要學習一下外存的儲存結構。

23、當然,實驗是少不了的。自己debug一下記憶體單元的位址,並且在紙上手工的畫一下是最好了。

24、最後,有了這些基礎,剩下也就好辦了。

25、不推薦教材。尤其是國外的教材,先容許我默默地吐一下槽,各種知識點零碎不堪,不成體系,不成系統。

26、之前算是一些鋪墊。講一下資料結構的學習方法。在現實世界中,資料元素之間的關係(邏輯結構)可分為三大類:線性結構、樹結構、圖結構(有的書多了一種結構——集合,即任何資料元素之間都沒有聯絡)。線性結構是最簡單的結構。

27、把握一種資料結構,總的來說,體現在它的結構、內在性質、外在特徵、操作方法等4個方面。這4個方面是相關的。

28、線性結構,又稱線性表。其特點是:除了第乙個元素和最後乙個元素之外,其它乙個元素都有乙個前驅和後繼。線性結構的結構簡單、性質也較少、特徵也很明顯。最基本的操作方法有5種方法:初始化、獲得當前線性表的長度、插入乙個元素、刪除乙個元素、查詢/獲得乙個元素。

29、線性表有多種型別。最簡單的線性表,是無序的。在無序的線性表的基礎上,增加乙個要求,即線性表中的元素是有序的。這樣,就要求插入元素時,要對元素的值進行比較,以找到相應的插入的位置。

30、同理,可以為線性表增加其它方法,例如,逆序的操作。

31、進一步延伸,可以得到許多線性表。最經典的線性表,除了順序表、單鏈表、迴圈鍊錶、雙向鍊錶之外,還有3個最常用的線性表——堆疊、佇列、串。這3個線性表,並不難得出。

33、串,是一種要求非常多的線性表,所以操作也非常多。有一些操作需要採用回溯演算法。

34、堆疊、佇列、串,用途廣泛。在具體的運用中,有很多變種。比如,佇列,在作業系統的程序管理的優先順序演算法中,採用了多級佇列,在程序狀態切換的演算法中,採用了多個佇列。但是,並不可怕,只要學會如何分析需求,從而改動操作方法,就可以實現。基本上,其它的操作方法都是在常規的5個方法的基礎上演變而來。

資料結構經驗

資料結構這一塊內容主要有陣列 陣列佇列 鍊錶 樹 二叉樹 哈弗曼二叉樹 1 概括地說 陣列佇列和鍊錶都是可以用來實現儲存多組資料並隨意插入刪除的資料結構。而樹是一種更加靈活的資料結構,更加像是特殊的鍊錶。2 陣列佇列就是通過佇列的方式將長度固定的陣列賦予插入刪除資料的功能,具體通過新定義陣列替換的方...

uml 別人的經驗

關聯 乙個事務和另乙個事務有聯絡,乙個學生與他所在的大學有關係,聚合 是一種特殊的關聯,強調整體和部分的關係,發動機,輪胎,底盤等等聚合成一輛汽車。當這輛汽車拆散 析構 後,發動機,輪胎這些部分都還可以繼續使用。組合 更強形式的聚合,強調部分和整體有相同的生命週期,整體負責建立,管理,維護部分。人有...

資料結構學習總結

了解資料,資料項,資料元素,資料物件的關係。資料元素 組成資料的,具有一定意義的基本單位,在計算機中做整體處理,也稱為記錄。乙個資料元素可以由多個資料項組成。資料物件 資料相同的資料元素的集合,是資料的子集。有的書上也成為資料物件和例項,結合的理解。資料結構可以分為 物理結構和邏輯結構 邏輯結構 集...