(學習筆記)數據結構大體回顧

“ 數據結構是指組成數據的元素之間的結構關係,即數據的組織結構 。”經過這幾天的淺顯認識,數據結構以數據元素爲單位,通過邏輯關係,將這些數據元素按照某種規律或者要求組織起來,方便查詢使用。數據元素可以是基本數據類型int 、char、float單個類型,也可以是struct結構類型。

1、線性表。a、線性表的順序存儲叫做順序表,存儲方式爲按照邏輯順序依次存放在一組地址連續的存儲單元,前提要求是存儲單元大小大於等於順序表長度。然後根據順序表的特性對工作目標進行初始化、插入、刪除操作等等。

      b、線性表的鏈式存儲稱爲鏈表,鏈表有單鏈表,循環鏈表和雙向鏈表。因爲隨機存儲,所以每個節點結構中包含指向下一個結點的指針。涉及到鏈表的基本運算有初始化鏈表、創建鏈表、查找結點、插入結點、刪除結點等等。其中最基本的單鏈表,創建方法有頭插法和尾插法兩種方式。頭插法將新的接頭放到第一個(頭結點head指向的結點),鏈表中結點順序與輸入順序是相反的;尾差法增加一個指向表尾的尾指針r,將新節點插入到表尾上。單鏈表是後兩個的基礎。鏈表的兩個應用:約瑟夫問題和一元多項式的表示及相加。

2、串(字符串),是一種特殊的線性表。定義爲-串(string)是由0或多個字符組成的有限序列。“因爲串是一種線性表,因此串的邏輯結構和線性表極爲相似,區別僅在於串的數據結構對象被限定爲字符集。基本運算有生成新串、求串的長度、串複製、串比較、串連接、求子串、返回子串位置、插入和刪除串等等。”實現方法有定長順序串、堆串和塊鏈串。在串中有串模式匹配問題,在主串s中查找子串t,其簡化方法涉及到KMP算法。

3、棧和隊列。棧(stark)和隊列(queue)都是特殊的線性表,是操作受限的線性結構。

a、棧是限定僅在表的一邊進行插入或刪除的線性表,通常進行插入或刪除操作的一端稱爲棧頂(top),另一端稱爲棧底(bottom)。棧的操作遵循後進先出(Last-In First-Out)的原則。棧的操作要求:爲當棧中無元素時,不能進行出棧操作(pop),否則稱爲棧“下溢”;當棧滿時,不能進行入棧操作(push),否則稱爲棧“下溢”。棧有順序棧和鏈棧兩種。順序棧是利用一片連續的存儲空間來存儲棧中的數據元素,可以用一個一維數組來表示,將數組起始一端設置爲棧底,棧頂指針top=-1,數組的大小必須事先給定,採用鏈式存儲則不需要。

b、隊列是限定在表的一端刪除元素而在表的另一端插入元素的線性表。隊列中只允許刪除元素的一端稱爲隊首(front),只允許插入元素的一端稱爲隊尾(rear)。

隊列遵循先進先出(First-In First-Out)的原則,添加元素稱爲入隊,刪除元素稱爲出隊。同樣有順序存儲方法和鏈式存儲方法,稱爲順序隊列和鏈隊列。順序隊列中有個循環隊列克服普通順序隊列存在的假溢出問題,要解決的是隊滿和隊空的判斷問題,一般採用浪費一個存儲空間,使隊尾指針rear永遠追不上隊頭指針front。

4、數組和廣義表。

a、數組是由n(n>=1個)相同類型的數據元素所構成的有限序列,而且這些元素被存儲在一塊連續的空間。關鍵的是數組元素的地址計算。矩陣的壓縮存儲指對有規律的元素和值相同的元素只分配一個存儲空間,對零元素不分配存儲空間。有特殊矩陣和稀疏矩陣,特殊矩陣中包括對稱矩陣、三角矩陣和對角矩陣。稀疏矩陣是指矩陣中大多數元素爲0。假設m行n列的矩陣含有t個非0元素,則稱δ=t/(m*n)爲稀疏因子,通常認爲δ<=0.05的矩陣爲稀疏矩陣。稀疏矩陣通常使用三元組表的壓縮存儲方式,並採用三元組表實現矩陣的轉置運算。

b、廣義表又稱列表。當廣義表LS非空時,稱第一個元素a1位LS的表頭,而其餘部分所組成的表稱爲LS的表尾。通常用鏈式存儲結構來表示。有兩種結點,分別是用以表示廣義表的表結點和用以表示原點元素的原子節點。相關算法有求廣義表的深度和廣度。

5、樹的基本概念。樹中關鍵的爲二叉樹。定義爲二叉樹是由n(n>=0)個結點的有限集合構成的,此集合或者爲空集,或者由一個根節點及兩棵互不相交的左右子樹所組成,並且左右子樹都是二叉樹。二叉樹的存儲結構通常採用順序存儲方式和鏈式存儲方式。順序存儲是指用一組連續的存儲單元按照完全二叉樹的結點的編號順序存放結點內容,但是在順序存儲結構中,深度爲k的二叉樹,需要長度爲(2的k次方-1)的一維數組。

遍歷二叉樹指按某種順序訪問二叉樹中的各個結點一次且僅一次的過程。若限定遍歷的順序爲先左後右,有前序遍歷,中序遍歷和後序遍歷。遍歷算法的應用於查詢二叉樹中的某個結點、兩種序列構造二叉樹、求樹的深度。

將二叉樹的各個結點中的空的左孩子指針域改爲指向其前驅,將空的右孩子指針域改爲指向其後繼,這種新的指針稱爲線索,得到的二叉樹稱爲線索二叉樹。

然後是樹和二叉樹的轉換。

哈夫曼樹是二叉樹的應用之一,也稱爲最優二叉樹——帶權路徑長度WPL最小的二叉樹。哈夫曼樹的應用:前綴編碼問題和最優判定樹問題。

6、圖。圖是由定點的有窮非空集合和頂點之間的邊的集合所組成的。分爲無向圖和有向圖,無向圖中的邊爲無向邊,有向圖中的邊爲有向邊。

圖的存儲結構用的最多的是鄰接矩陣和鄰接表這兩種形式。

圖的遍歷通常有兩種有深度優先搜索(Depth-First Search)和廣度優先搜索(Breadth-First Search)。深度優先遍歷算法以遞歸技術爲支持,而廣度優先算法則以隊列技術爲支持。

無向圖的連通性中的難點是利用算法求解最小生成樹。

有向圖的兩個最短路徑的問題:a.求一個結點到其他結點的最短路徑;b.求任意兩個結點間的最短路徑。

有向無環圖(不存在迴路的有向圖)中的拓撲排序和求解關鍵路徑算法。

7、查找。三個參量:a.查找對象;b.查找範圍;c.查找對象在查找範圍L中所處的位置。

基於線性表的查找法:a.順序查找法;b.折半查找法;c.分塊查找法。在順序查找法中設置下標爲0的爲監視哨,存放要查找的關鍵字。

基於樹的查找法:a.二叉排序樹;b.平衡二叉排序樹;c.B樹。平衡二叉樹是一棵空的二叉排序樹或者是a.根節點的左子樹和右子樹的高度至多相差1;b.根節點的左子樹和右子樹也都是平衡二叉樹的二叉樹排序樹。基本操作有查找結點和刪除結點。

散列技術,在結點的關鍵字k和結點的存儲位置p之間建立對應關係H,使得p=H(k),在查找時,根據對應關係找到位置。採用散列技術將記錄存儲在一塊連續的存儲空間中,這塊連續的存儲空間稱爲散列表(哈希表)。函數H稱爲散列函數,得到的存儲位置p稱爲散列地址。着重介紹了除留餘數法、處理衝突方法爲先行探測在散列方式。線性探測再散列、二次探測再散列、僞隨機探測再散列、鏈地址法是4種常用的處理衝突的方法。

8、內部排序。a.選擇排序:每一趟從待排序的n-i+1(i=1,2,3......n-1)條記錄中選出關鍵字最小的記錄作爲有序序列的第i條記錄。有簡單選擇排序、堆排序、基於並行的錦標賽排序;

  b.插入排序:在一個已經排好序的記錄子集的基礎上,每一步都將下一個待排序的記錄有序插入已經排好序的記錄子集的合適位置上,直到將所有待排序記錄全部插入爲止。分爲直接插入排序、折半插入排序、希爾排序。

  c.交換排序:基於簡單的交換思想實現的冒泡排序法以及在此基礎上進行改進的快速排序法。

9、文件。


完全根據魏振剛的《數據結構》。

純粹個人寫着玩。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章