數據結構與算法總結

本教材共十一章:

第一章爲數據結構與算法概述,爲本書學習基礎和預備知識。數據的邏輯結構是對數據之間關係的描述,有時就把邏輯結構簡稱爲數據結構。邏輯結構形式地定義爲(KR)(或(DS)),其中,K數據元素的有限集,RK上的關係的有限集。邏輯結構有四種基本類型:集合結構、線性結構、樹狀結構和網絡結構。表和樹是最常用的兩種高效數據結構,許多高效的算法能夠用這兩種數據結構來設計實現。表是線性結構的(全序關係),樹(偏序或層次關係)和圖(局部有序(weak/local order))是非線性結構。順序存儲和鏈接存儲是數據的兩種最基本的存儲結構。在順序存儲中,每個存儲空間含有所存元素本身的信息,元素之間的邏輯關係是通過數組下標位置簡單計算出來的線性表的順序存儲,若一個元素存儲在對應數組中的下標位置爲i,則它的前驅元素在對應數組中的下標位置爲i-1,它的後繼元素在對應數組中的下標位置爲i+1。在鏈式存儲結構中,存儲結點不僅含有所存元素本身的信息,而且含有元素之間邏輯關係的信息。數據的鏈式存儲結構可用鏈接表來表示。其中data表示值域,用來存儲節點的數值部分。Plp2,…,Pill(1n1)均爲指針域,每個指針域爲其對應的後繼元素或前驅元素所在結點(以後簡稱爲後繼結點或前驅結點)的存儲位置。通過結點的指針(又稱爲鏈域)可以訪問到對應的後繼結點或前驅結點,若一個結點中的某個指針域不需要指向其他結點,則令它的值爲空(NULL)。在數據的順序存儲中,由於每個元素的存儲位置都可以通過簡單計算得到,所以訪問元素的時間都相同;而在數據的鏈接存儲中,由於每個元素的存儲位置保存在它的前驅或後繼結點中,所以只有當訪問到其前驅結點或後繼結點後才能夠按指針訪問到,訪問任一元素的時間與該元素結點在鏈式存儲結構中的位置有關。

第二章爲順序表及其應用,其中重點一是順序表的概念、數據類型、數據結構、基本算法和性能分析等;二是順序表的應用,包括查找問題(簡單順序查找、二分查找、分塊查找)、排序問題(直接插入排序、希爾排序、冒泡排序、快速排序、直接選擇排序、歸併排序)、字符處理問題(模式匹配)等。順序表是在計算機內存中以數組的形式保存的線性表,是指用一組地址連續的存儲單元依次存儲數據元素的線性結構。線性表採用順序存儲的方式存儲就稱之爲順序表。順序表是將表中的結點依次存放在計算機內存中一組地址連續的存儲單元中。順序查找爲在一個已知無(或有序)序隊列中找出與給定關鍵字相同的數的具體位置。原理是讓關鍵字與隊列中的數從最後一個開始逐個比較,直到找出與給定關鍵字相同的數爲止,它的缺點是效率低下。二分查找又稱折半查找,優點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表爲有序表,且插入刪除困難。因此,折半查找方法適用於不經常變動而 查找頻繁的有序列表。首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表 分成前、後兩個子表,如果中間位置記錄的關鍵字大於查找關鍵字,則進一步查找前一子表,否則進一步查找後一子表。重複以上過程,直到找到滿足條件的記錄, 使查找成功,或直到子表不存在爲止,此時查找不成功。分塊查找又稱索引順序查找,它是順序查找的一種改進方法將n個數據元素"按塊有序"劃分爲m塊(≤ n)。每一塊中的結點不必有序,但塊與塊之間必須"按塊有序";即第1塊中任一元素的關鍵字都必須小於第2塊中任一元素的關鍵字;而第2塊中任一元素的關鍵字又都必須小於第3塊中的任一元素的關鍵字。

第三章爲鏈表及其應用,主要介紹了單鏈表和循環鏈表。單鏈表是一種鏈式存取的數據結構,用一組地址任意的存儲單元存放線性表中的數據元素。鏈表中的數據是以節點來表示的,每個結點的構成:元素(數據元素的映象) + 指針(指示後繼元素存儲位置),元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。以“結點的序列”表示線性表稱作線性鏈表(單鏈表)。單鏈表是鏈式存取的結構,爲找第 數據元素,必須先找到第 i-1 個數據元素。因此,查找第 數據元素的基本操作爲:移動指針,比較 和 i。循環鏈表是另一種形式的鏈式存貯結構。它的特點是表中最後一個結點的指針域指向頭結點,整個鏈表形成一個環。

第四章爲堆棧及其應用,介紹了在兩種不同存儲結構下設計的堆棧,即順序棧和鏈棧。本人學到是兩種數據結構。堆棧都是一種數據項按序排列的數據結構,只能在一端(稱爲棧頂(top))對數據項進行插入和刪除。

第五章爲隊列及其應用,介紹了順序存儲和鏈接存儲方法下的兩種隊列,即順序(循環)隊列和鏈隊列的數據結構。隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱爲隊尾,進行刪除操作的端稱爲隊頭。隊列中沒有元素時,稱爲空隊列。在隊列這種數據結構中,最先插入的元素將是最先被刪除的元素;反之最後插入的元素將是最後被刪除的元素,因此隊列又稱爲“先進先出”(FIFOfirst in first out)的線性表

第六章爲特殊矩陣、廣義表及其應用,有數組、稀疏矩陣和廣義表的基本概念。矩陣中非零元素的個數遠遠小於矩陣元素的總數,並且非零元素的分佈沒有規律,則稱該矩陣爲稀疏矩陣(sparse matrix);與之相區別的是,如果非零元素的分佈存在規律(如上三角矩陣、下三角矩陣、對稱矩陣),則稱該矩陣爲特殊矩陣。這五章爲邏輯結構爲“線性”的數據結構。

第七章二叉樹及其應用、內容包括二叉樹的建立、遍歷、線索化和表達式求值等算法。並衍生一些應用問題,包括哈夫曼編碼問題、(平衡)二叉排序樹問題和堆棧序問題。二叉樹是每個結點最多有兩個子樹的有序樹。二叉樹常被用於實現二叉查找樹二叉堆。值得注意的是,二叉樹不是樹的特殊情形。在圖論中,二叉樹是一個連通的無環圖,並且每一個頂點的度不大於2。有根二叉樹還要滿足根結點的度不大於2。有了根結點後,每個頂點定義了唯一的根結點,和最多2個子結點。然而,沒有足夠的信息來區分左結點和右結點。在計算機科學中,二叉樹是每個結點最多有兩個子樹的有序樹。通常根的子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用作二叉查找樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多隻有二棵子樹(不存在出度大於2的結點),二叉樹的子樹有左右 之分,次序不能顛倒。哈夫曼編碼(Huffman Coding)是一種編碼方式,哈夫曼編碼是可變字長編碼(VLC)的一種。Huffman1952年提出一種編碼方法,該方法完全依據字符出現概率來構造異字頭的平均長度最短的碼字,有時稱之爲最佳編碼,一般就叫做Huffman編碼(有時也稱爲霍夫曼編碼)。

第八章樹和森林及其應用爲邏輯結構爲“樹形”的數據結構。樹是由根結點和若干顆子樹構成的。樹是由一個集合以及在該集合上定義的一種關係構成的。集合中的元素稱爲樹的結點,所定義的關係稱爲父子關係。父子關係在樹的結點之間建立了一個層次結構。在這種層次結構中有一個結點具有特殊的地位,這個結點稱爲該樹的根結點,或稱爲樹根。

第九章爲散列隊列及其應用,是散列存儲方法下的數據結構。散列存儲,又稱hash存儲,是一種力圖將數據元素的存儲位置與關鍵碼之間建立確定對應關係的查找技術。散列法存儲的基本思想是:由節點的關鍵碼值決定節點的存儲地址。散列技術除了可以用於查找外,還可以用於存儲。

第十章圖及其應用爲邏輯結構爲“圖形”的數據結構。內容包括圖的基本算法以及圖的典型應用問題(最小生成樹、最短路徑、拓撲排序和關鍵路徑)。一個有 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 個結點,並且有保持圖連通的最少的邊。最小生成樹可以用kruskal(克魯斯卡爾)算法或prim(普里姆)算法求出。對一個有向無環圖(Directed Acyclic Graph簡稱DAG)G進行拓撲排序,是將G中所有頂點排成一個線性序列,使得圖中任意一對頂點uv,若邊(u,v)E(G),則u在線性序列中出 現在v之前。通常,這樣的線性序列稱爲滿足拓撲次序(Topological Order)的序列,簡稱拓撲序列。簡單的說,由某個集合上的一個偏序得到該集合上的一個全序,這個操作稱之爲拓撲排序。

第十一章爲算法性能分析和算法設計方法,主要對算法和程序性能分析中的目的、時間複雜性和空間複雜性要素和分析方法、時間複雜度性上(下)限值、算法性能測量等問題。

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