數(shù)據(jù)結(jié)構(gòu)考研考點(diǎn)精講及復(fù)習(xí)思路_第1頁
數(shù)據(jù)結(jié)構(gòu)考研考點(diǎn)精講及復(fù)習(xí)思路_第2頁
數(shù)據(jù)結(jié)構(gòu)考研考點(diǎn)精講及復(fù)習(xí)思路_第3頁
數(shù)據(jù)結(jié)構(gòu)考研考點(diǎn)精講及復(fù)習(xí)思路_第4頁
數(shù)據(jù)結(jié)構(gòu)考研考點(diǎn)精講及復(fù)習(xí)思路_第5頁
已閱讀5頁,還剩64頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

《《數(shù)據(jù)結(jié)構(gòu)》考研考點(diǎn)精講及復(fù)習(xí)思《數(shù)據(jù)結(jié)構(gòu)》考研分析與指導(dǎo)~、考試特點(diǎn)分1.在計(jì)算機(jī)專業(yè)入學(xué)統(tǒng),作為專業(yè)課綜合中的一個(gè)版塊進(jìn)行。在部分自主命題院校入學(xué)考試中有單獨(dú)作為一個(gè)科目進(jìn)行,也有和其他一門或者兩門科目聯(lián)合出題。2.出題形式多為選擇題和綜合應(yīng)用3.側(cè)重于基礎(chǔ)知識點(diǎn)及對知識點(diǎn)靈活運(yùn)用的考二、復(fù)習(xí)方1.分清復(fù)習(xí)的階段,把握復(fù)習(xí)進(jìn)2.親手做題,在練習(xí)中總結(jié)出題方向和方法,重視,透徹分析,揣摩出題人心理。只有做好一定量的習(xí)題,才能幫助理解和牢固掌握考點(diǎn)。3.講過的知識點(diǎn)和題徹底掌握并及時(shí)回顧,不要學(xué)過忘過。4.注重知識點(diǎn)之間的聯(lián)系5.不可忽視基礎(chǔ)概念和知識體系。但是同時(shí)還要做到重點(diǎn)突出,突破難點(diǎn),查缺補(bǔ)漏三、考試內(nèi)容及分值分布章重難必考考試題1.緒選2.線性√√√選擇、綜合分3.棧和隊(duì)√√√選擇、綜合分4.√√選擇、填5.?dāng)?shù)組和廣義選擇、填6.√√√選擇、綜合分7.√√√選擇、綜合分8.查√√√選擇、綜合分9.排√√√選擇、綜合分1四、章節(jié)知識點(diǎn)及題型分章知識題型題型易考1數(shù)據(jù)結(jié)構(gòu)的定義、邏輯結(jié)的分類、算法的定義和雜度和物理結(jié)構(gòu)法性能的選題邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的和算法性能的復(fù)雜度分類、法的定義2性表的概念及運(yùn)算性表的順序性表的鏈?zhǔn)皆囗?xiàng)式的表示相加選題1.線性表的定義和基2.線性表的順序3.線性表的鏈?zhǔn)奖具\(yùn)算綜合析題1.線性表算法的設(shè)的定義和運(yùn)的順序和鏈選題1.棧和隊(duì)列的定義和2.棧和隊(duì)列的順序運(yùn)鏈?zhǔn)剑硹j?duì)的應(yīng)列的定義和運(yùn)列的順序和鏈列的應(yīng)用式綜合析題棧和隊(duì)列的應(yīng)用算4類型的定的順序和鏈?zhǔn)降哪J狡ヅ渌惴ㄟx題1.串的定義和綜合析題2.串的模式匹配算5組的定義和運(yùn)算組的順序殊矩陣的壓縮義表選題數(shù)組和廣義表的定義和矩陣的壓縮的概念與定叉樹的定義和結(jié)構(gòu)選題樹與二叉樹的定義樹、森林和二叉樹的系結(jié)構(gòu)6二叉樹的遍歷與線化、森林和二叉樹的關(guān)夫曼樹及其應(yīng)用系綜合析題哈夫曼樹及其應(yīng)選題圖的定義和結(jié)圖的定義與圖的結(jié)構(gòu)7的遍小生成撲排序和關(guān)鍵路徑短路徑綜合析題最小生成樹拓?fù)渑判蜿P(guān)鍵路徑最短路2續(xù)章知識題題型易考選擇查找的定義順序查找1.查找基本概念折半查找82.基于靜3.基于綜合分題索二引叉順排序序表樹查找4.哈希的查找平衡二叉排序樹B樹哈希的解決9①排②交換排③選擇排④歸并排⑤基數(shù)排綜合分題各種排序方法的應(yīng)用3第一 緒~、考試分考重點(diǎn)與難考中常見題復(fù)習(xí)思路與方數(shù)邏、四綜1.熟和物;練,結(jié)?構(gòu)二、考點(diǎn)講數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計(jì)算的程序設(shè)計(jì)問題時(shí)處理的操作對象以及它們之間的關(guān)系和操作等等的學(xué)科。1.基本概·數(shù)據(jù)(Data)對客觀事物的符號描述,能輸入到計(jì)算機(jī)中并被計(jì)算機(jī)程序處理的符號的總稱;能被計(jì)算機(jī)識別、和加工處理的信息的載體。字母:a~z,單詞圖、音頻信號等表·數(shù)據(jù)元素(DataElement)數(shù)據(jù)元素是組成數(shù)據(jù)的基本單位,是數(shù)據(jù)集合的,在計(jì)算機(jī)中通常作為一個(gè)整體進(jìn)行考慮和處理。例,“對弈樹”中的一個(gè)格4書目信息中的一條書數(shù)據(jù)項(xiàng):一個(gè)數(shù)據(jù)元素可由若干個(gè)數(shù)據(jù)項(xiàng)組成例,一條書目信息是由書名、作者名、分類等多個(gè)數(shù)據(jù)項(xiàng)組成的數(shù)據(jù)項(xiàng)是數(shù)據(jù)的不可分割的最小單位。例如:有一個(gè)學(xué)生表如下所示。這個(gè)表中的數(shù)據(jù)元素是學(xué)生記錄,每個(gè)數(shù)據(jù)元素由四個(gè)數(shù)據(jù)(即學(xué)號、姓別、和班號)組成學(xué)班1張男8劉女李女陳男王男董男5王女·數(shù)據(jù)結(jié)構(gòu)(Data數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素集合結(jié)構(gòu)(Structure):數(shù)據(jù)元素相互之間的關(guān)系。在形式上可用二元組表示:DataStructure=(D,D:數(shù)據(jù)元素的有限集S:D上關(guān)系的有限集D={ki|1≤n0ki示集合D中的第i個(gè)結(jié)點(diǎn)或數(shù)據(jù)元n為D中結(jié)點(diǎn)的個(gè)若n=0,則D是一個(gè)空集,表示D無結(jié)構(gòu)可言,有時(shí)也可以認(rèn)為它具有任意的結(jié)構(gòu)S={rj|1≤mm0rj示集合S中的第j個(gè)二元關(guān)系(簡稱關(guān)系m為S中關(guān)系的個(gè)若m=0,則S是一個(gè)空集,表明集合D中的元結(jié)點(diǎn)間不存在任何關(guān)系,彼此是獨(dú)立D上的一個(gè)關(guān)系r是序偶的集合,對于r中的任一序偶<x,y>(x,yD),稱序偶的第一結(jié)點(diǎn)為第二結(jié)點(diǎn)的直接前驅(qū)結(jié)點(diǎn)(通常簡稱前驅(qū)結(jié)點(diǎn)),稱第二結(jié)點(diǎn)為第一結(jié)點(diǎn)的直接后繼結(jié)點(diǎn)(通常簡稱后繼結(jié)點(diǎn))。如在<x,y>的序偶中,x為y的前驅(qū)結(jié)點(diǎn),而y為x的后繼結(jié)點(diǎn)。若某個(gè)結(jié)點(diǎn)沒有前驅(qū),則稱該結(jié)點(diǎn)為開始結(jié)點(diǎn);若某個(gè)結(jié)點(diǎn)沒有后繼,則稱該結(jié)點(diǎn)為終端結(jié)點(diǎn);除此之外的節(jié)點(diǎn)稱為節(jié)點(diǎn)“尖括號”表示有向關(guān)系,“圓括號”表示無向關(guān)系例如:用二元組表示學(xué)生表,學(xué)生表有7個(gè)結(jié)點(diǎn),依次用k1~k7表示,則對應(yīng)的二元組表示為:DataStructure=(D,S)其中:D={k1,k2,k3,k4,k5,k6,k7S={<k1,k2>,<k2,k3>,<k3,k4>,<k4,k5>,<k5,k6>,<k6,k7>邏輯結(jié)構(gòu)圖:可以將數(shù)據(jù)結(jié)構(gòu)用圖形形象地表示出來,圖形中的每個(gè)結(jié)點(diǎn)對應(yīng)著一個(gè)數(shù)據(jù)元素,兩結(jié)點(diǎn)之間的連線對應(yīng)著關(guān)系中的一個(gè)序偶。上述“學(xué)生表”數(shù)據(jù)結(jié)構(gòu)用下圖的圖形表示2.?dāng)?shù)據(jù)結(jié)構(gòu)的內(nèi)邏輯結(jié)數(shù)據(jù)元間的關(guān)邏輯結(jié)構(gòu)可看作是從具體問題抽象出來的數(shù)學(xué)模型按照邏輯關(guān)系的不同特性分類:邏輯結(jié)構(gòu)類型的分(1)線性結(jié)所謂線性結(jié)構(gòu),該結(jié)構(gòu)中的結(jié)點(diǎn)之間存在一對一的關(guān)系其特點(diǎn)是:開始結(jié)點(diǎn)和終端結(jié)點(diǎn)都是惟一的,除了開始結(jié)點(diǎn)和終端結(jié)點(diǎn)以外,其余結(jié)點(diǎn)都有且僅有一個(gè)前驅(qū)結(jié)點(diǎn),有且僅有一個(gè)后繼結(jié)點(diǎn)。順序表就是典型的線性結(jié)構(gòu)(2)非線性結(jié)所謂非線性結(jié)構(gòu),該結(jié)構(gòu)中的結(jié)點(diǎn)之間存在一對多或多對多的關(guān)系。它又可以細(xì)分為樹形結(jié)構(gòu)和圖形結(jié)構(gòu)兩類。所謂樹形結(jié)構(gòu),該結(jié)構(gòu)中的結(jié)點(diǎn)之間存在一對多的關(guān)系。其特點(diǎn)是每個(gè)結(jié)點(diǎn)最多只有一個(gè)前驅(qū)6但可以有多個(gè)后繼,可以有多個(gè)終端結(jié)點(diǎn)。非線性結(jié)構(gòu)樹形結(jié)構(gòu)簡稱為樹UNIX文件系統(tǒng)的系統(tǒng)結(jié)構(gòu)所謂圖形結(jié)構(gòu),該結(jié)構(gòu)中的結(jié)點(diǎn)之間存在多對多的關(guān)系。其特點(diǎn)是每個(gè)結(jié)點(diǎn)的前驅(qū)和后繼的個(gè)數(shù)都可以是任意的。因此,可能沒有開始結(jié)點(diǎn)和終端結(jié)點(diǎn),也可能有多個(gè)開始結(jié)點(diǎn)、多個(gè)終端結(jié)點(diǎn)。圖形結(jié)構(gòu)簡稱為圖。結(jié)構(gòu)(物理結(jié)構(gòu))邏輯結(jié)構(gòu)在計(jì)算機(jī)中的 映象,是邏輯結(jié)構(gòu)在計(jì)算機(jī)中的實(shí)現(xiàn),它包括數(shù)據(jù)元素的表示和關(guān)系的表示。順序結(jié)非順序結(jié)構(gòu)(鏈?zhǔn)?結(jié)構(gòu))索引結(jié)構(gòu)散列結(jié)例如:用順序法和鏈?zhǔn)椒ū硎鞠旅娴膶W(xué)生表學(xué)班1張男8劉女李女陳男王男董男5王女用順序法存放學(xué)生表的結(jié)構(gòu)體定義為7《《數(shù)據(jù)結(jié)構(gòu)》考研考點(diǎn)精講及復(fù)習(xí)思structStud/號///號///// charname[8];charsex[2]charclass[4] Studs[7]={1,“張斌”,“男”,“9901”}…{5,"王萍","女","9901"}結(jié)構(gòu)體數(shù)組Studs各元素在內(nèi)存中按順序存放,即第i(1i6個(gè)學(xué)生對應(yīng)的元素Studs[i]存放在第i+1個(gè)學(xué)生對應(yīng)的元素Studs[i+1]之前,Studs[i+1]正好在Studs[i]之后。用鏈?zhǔn)椒ù娣艑W(xué)生表的結(jié)構(gòu)體定義為:typedefstructnode{int/號/charname[8]//charsex[2]charclass[4]/ 性別/ 指向下struct指向下}

學(xué)生的指針學(xué)生表構(gòu)成的鏈表如下圖所示。其中的head為第一個(gè)數(shù)據(jù)元素的指針鏈?zhǔn)椒ǖ娜秉c(diǎn)·空間占用無法隨機(jī)8鏈?zhǔn)椒ǖ膬?yōu)點(diǎn)便于修改(、刪除、移動)3.算法(1)算法(Algorithm)的定Algorithmisafinitesetofruleswhichgivesasequenceofoperationforsolvingaspecifictypeofproblem.(算法是規(guī)則的有限集合,是為解決特定問題而規(guī)定的一系列操作。)(2)算法的特①有窮性:有限步驟之內(nèi)正常結(jié)束,不能形成無窮循環(huán)②確定性:算法中的每一個(gè)步驟必須有確定含義,無二義性③可行性:原則上能精確進(jìn)行,操作可通過已實(shí)現(xiàn)的基本運(yùn)算執(zhí)行有限次而完成④輸入:有多個(gè)或0個(gè)輸入⑤輸出:至少有一個(gè)或多個(gè)輸出在算法的五大特性中,最基本的是有限性、確定性和可行性。4.算法描述的工具描述算法的方自然語言:優(yōu) 簡單。缺 有歧異,表達(dá)復(fù)雜思想不明晰,不能方式很好結(jié)高級程序設(shè)計(jì)語言,如Pascal,C/C++,Java等。優(yōu)點(diǎn) 克服了自然語言的缺點(diǎn),可直接執(zhí)行。缺點(diǎn) 對部分問題的描述比較煩雜, 類語言。和高級程序設(shè)計(jì)語言類似,但是對其中一些比較煩雜的部分進(jìn)行和簡化(原因:類舉法主要目的是為了清晰的表述思想)例:兩個(gè)數(shù)據(jù)a,b交換空舉自然語言:交換a,b的空間高級語言:{x=a;a=b;b=x;}類語言:ab;//交換空間5.對算法作性能評衡量算法效率的方法主要有兩大類事后統(tǒng)計(jì):利用計(jì)算機(jī)的時(shí)鐘事前分析估算:用高級語言編寫的程序運(yùn)行的時(shí)間主要取決于如下因素算法問題規(guī)模使用語言:級別越高,效率越低;編譯程序;機(jī)器通常,從算法中選取一種對于研究的問題來說是基本操作的原操作,以該基本操作重復(fù)執(zhí)行的次數(shù)作為算法執(zhí)行的時(shí)間度量?;静僮髦貜?fù)執(zhí)行的次數(shù)分別為1,n,9設(shè)算法的問題規(guī)模為頻度:語句重復(fù)執(zhí)行的次數(shù)稱為該語句的頻度,記f(n)對算法各基本操作的頻度求和,便可得算法的時(shí)間復(fù)雜度。但實(shí)際中所關(guān)心的主要是一個(gè)算法所花時(shí)間的數(shù)量級,即取算法各基本操作的最大頻度數(shù)量級。時(shí)間復(fù)雜度:算法執(zhí)行時(shí)間度量,記T(n)=O(axlevelf(n)))。f(n)=1+n+n2+n3T(n)=O(n3)O的數(shù)學(xué)定義:若T(n)和f(n)是定義在正整數(shù)集合上的兩個(gè)函數(shù),則如果存在正常數(shù)C和n得當(dāng)n≥時(shí),總滿足0Tn)≤Cfn),則記做T(n)=O(f(n))也就是只求出T(n)的最高階(數(shù)量級),忽略其低階項(xiàng)和常系數(shù),這樣既可簡化T(n)的計(jì)算,能比較客觀地反映出當(dāng)n很大時(shí),算法的時(shí)間性能。6.算法的空間復(fù)雜度關(guān)于算法的空間需求,類似于算法的時(shí)間復(fù)雜度,采用空間復(fù)雜度作為算法所需空間的量度,記作:S(n)=O(f(n)三、舉1.從邏輯結(jié)構(gòu)上可以把數(shù)據(jù)結(jié)構(gòu)分為( )兩大類.【交通科技大學(xué)】A.動態(tài)結(jié)構(gòu)、靜態(tài)結(jié)構(gòu)B.順序結(jié)構(gòu)、鏈?zhǔn)浇Y(jié)C.線性結(jié)構(gòu)、非線性結(jié)構(gòu)D.初等結(jié)構(gòu)、構(gòu)造型結(jié)2.在下面的程序段中,對x的賦值語句的頻度為( )【工商大學(xué)】FORi:=1TOnDOFORj:=1TOnx:=x+2A.O( B.O( C.O(n2 D.O(log23.以下屬于邏輯結(jié)構(gòu)的是 )【西安電子科技大學(xué)A.順序 B.哈希 C.有序 D.單鏈四、本講小本章講解了數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)、算法的基本概念,數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)。重點(diǎn)講解了數(shù)據(jù)的4種邏輯結(jié)構(gòu)和4種物理結(jié)構(gòu),以及算法復(fù)雜度。第二 線性分2. 線性表的概念及運(yùn)算[一般了解2.2 線性表的順序[熟練掌握]2. 線性表的鏈?zhǔn)剑凼炀氄莆盏冢笨贾攸c(diǎn)與難考考重點(diǎn)與難考中常見題復(fù)習(xí)思路與方線性表的基本概念和常用線性表在常用操作、性表選擇題、2.儲掌握線性?操作、線性表的順序方式?的順序?綜合分析題二、考點(diǎn)講2. 線性表的概念及運(yùn)1.線性表的定—個(gè)線性表是具有n個(gè)數(shù)據(jù)元素的有限序列。2.線性表的長度

記為(a1,…,ai-aiai,…,an線性表中元素的個(gè)數(shù)n(n>=0),n=0時(shí),稱為空表

i個(gè)元素,稱i為數(shù)據(jù)元素ai性表中的位序4.線性表的邏輯結(jié)例子英文字母表(A,B,…,Z)車輛登記表5.線性表的特同一性:線性表由同類數(shù)據(jù)元素組成,每一個(gè)ai須屬于同一數(shù)據(jù)對象有窮性:線性表由有限個(gè)數(shù)據(jù)元素組成,表長度就是表中數(shù)據(jù)元素的個(gè)數(shù)有序性:線性表中相鄰數(shù)據(jù)元間存在著序偶關(guān)系<ai,ai+1>。6.線性表的基本運(yùn)算初始化InitList(L建立一個(gè)空表求表長ListLength(L)返回線性表的長度讀表元素etEmL,i,e用e返回L中第i個(gè)數(shù)據(jù)元素的值定位LaeElemL,e,cme))返回滿足關(guān)系的數(shù)據(jù)元素的位序ListInsert(Li,e)在L中第i個(gè)位置之前新的數(shù)據(jù)元素e,線性表的長度增1。刪除ListDelete(Li,&e)刪除L的第i個(gè)位置上的數(shù)據(jù)元素e,線性表的長度減1輸出ListDisplay(L)按前后次序輸出線性表的所有元素練習(xí)1:兩個(gè)線性表LA和LB分別表示兩個(gè)集合A和B,現(xiàn)求一個(gè)新的集合A=∪B。voidunion(ListaListLb){Lalen=ListLength(La);Lblen=ListLength(Lb)for(i=1;i<=Lblen;i++){tEmLb,i,e);if(?。幔澹牛恚蹋幔?,equal))ListInsert(La,++Lalen,e);}}練習(xí)

O(ListLength(La)×ListLength(Lb)兩個(gè)線性表LA和LB中的數(shù)據(jù)元素按值非遞減有序排列,現(xiàn)將LA和LB歸并為一個(gè)新的線性表,LC中的數(shù)據(jù)元素仍按值非遞減有序排列。LA=(3,5,8,LB=(2,6,8,9,11,15,LC=(2,3,5,6,8,8,9,11,11,15,a,當(dāng)a!bcb,當(dāng)a>bvoMrgeitListLa,ListLb,List{InitList(Lc)Lalen=ListLength(La); Lblen=ListLength(Lb);i=j=1;k=0;while((i<=Lalen)&&(j<=Lblen))tEmLa,i,a);tEmLb,j,b)if(a<=b){ListInsert(Lc,++k,a);++i;}else{ListInsert(Lc,++k,b);++j;}}while(i<=Lalen)tEmLa,i++,a);ListInsert(Lc,++k,a);}while(j<=Lblen){tEmLb,j++,b);ListInsert(Lc,++k,b);}O(ListLength(La)+ListLength(Lb))例,La=(3,5,8),Lb=(2,6,8,9,15)構(gòu)造Lc=(2,3,5,6,8,8,9,15)首先,Lalen=3;Lblen=5;2.2 線性表的順序表示1.順序表:按順序方式構(gòu)造的線性表假設(shè)線性表中有n個(gè)元素,每個(gè)元素占k個(gè)單元,第一個(gè)元素的地址為loc(a),則可以通過如下公式計(jì)算出第i個(gè)元素的地址loc(ai):loc(ai)=loc(a1)+(i-1)×k其中loc(a1)稱為址。2.順序表的特點(diǎn)邏輯結(jié)構(gòu)中相鄰的數(shù)據(jù)元素在結(jié)構(gòu)中仍然相鄰線性表的順序結(jié)構(gòu)是一種隨機(jī)存取的結(jié)構(gòu)。3.順序表的描述:typedef{ElemType //當(dāng)前長 listsize;//分配的容}//ElemTypeelem[Etypedef#Epe #為根據(jù)具體問題確定的數(shù)據(jù)類型typedefint 4.順序表上基本運(yùn)算的實(shí)初始化StatusInitListSq(SqList{L.elem=(ElemType)alc(LISTINITSIZEsizeof(ElemType));if(!L.exit(OELW;L.length=0;L.listsize=LISTINITreturn}L.elem=newElemType[LISTINITSIZE]順序表的:在表中第4個(gè)元前“21“順序表中元StatusListInsertSq(SqList&L,inti,ElemTypee){if((i<1)||(i>L.length+1))returnERROR;if(L.length>=L.listsize){realloc(…);….;//越界處理;}q=&(L.elem[i-1])for(p=&(L.elem[L.length-1];p>=q;--(p+1)=p;q=e;++L.length;n}//越界處if(L.length>=L.listsize newbase=(ElemType)realloc(L.elem(L.listsize+LISTINCREMENT)sizeof(ElemType))if(?。睿澹鳎猓幔螅澹?exit(OVELW;L.elem=newbase;L.listsize+=LISTINCREMENT;算法時(shí)間復(fù)雜度:時(shí)間主要花在移動元素上,而移動元素的個(gè)數(shù)取決于元素位置。i=1,需移動n個(gè)元素;i=n+1,需移動0個(gè)元素i=i,需移動n-i+1個(gè)元素假設(shè)pi是在第i個(gè)元前一個(gè)新元素的概則長度為n的線性表 一個(gè)元素所需移動元素次數(shù)的期望Eis=∑pi(n-i+1)i設(shè)在任何位置元素等概率,n

=n+1 n+1(n-i+1)i n+i

O(順序表的歸并,表中元素非遞減排列vidMergsSq(SqListLa,SqListLb,SqListc{pa=La.elem;pb=Lb.Lc.listsize=Lc.length=La.length+Lb.length;pc=Lc.elem=(ElemType)lc…);if(!Lc.elem)exit(OVLW;palast=La.elem+La.length-1;pblast=Lb.elem+Lb.length-1;while((pa<=palast)&&pb<=pblast)){if(pa<=pb) pc++=pa++;elsepc++= pb++;}while(pa<=palast)pc++=pa++;while(pb<=pblast) pc++=pb++;}順序表的基礎(chǔ)要點(diǎn)1.無需為表示元素間的邏輯關(guān)系而增加額外的空間,密度大(100%);2.可隨機(jī)存取表中的任一元素。3.或刪除一個(gè)元素時(shí),需平均移動表的一半元素,具體的個(gè)數(shù)與該元素的位置有關(guān),在等概率情況下,n/2,刪除(n-1)/2;O(n)4.分配只能預(yù)先進(jìn)行分配5.將兩個(gè)各有n個(gè)元素的有序表歸并為一個(gè)有序表,其最少的比較次數(shù)是:n練習(xí)2.29已知A、B、C為三個(gè)元素值遞增有序的順序表,現(xiàn)要求對A作如下運(yùn)算,刪去那些既在B中出現(xiàn)又在C中出現(xiàn)的元素,實(shí)現(xiàn)上述算法并分析時(shí)間復(fù)雜度。A=A-(A=(1,2,6,6,8,9,10,10,11,15)B=(1,2,6,6,7,9,10,15)C=(3,4,6,7,7,9,9,9,10,A=(1,2,8,11,15)分析:先從B和C中找出公有元素,記為eA中從當(dāng)前位置開始,凡小于same的元素均保留(存到新的位置),等于same的跳過大于same時(shí)就再找下一個(gè)voidSqListIntersectDelete(SqListASqListB,SqList pa=A.elem;palast;pb;pblast;pc;pclast;while((pa<=palast)&&(pb<=pblast)&&(pc<=pclast)){if(pb<pc) pb++;else{

pc++same=while((pb<=pblast)while((pc<=pc

&&(pb==ae&&(pc==me

pb++;pc++while((pa<=palast)&&(pa<me)p0++= pa++;}//

while((pa<=pa

&&(pa==ae pa++}//while(pa<=pap0++= A.length=p0"A.elem;}三、舉1.下面關(guān)于線性表的敘述中,錯(cuò)誤的是哪一個(gè)?( )【北方交通大學(xué)】A.線性表采用順序,必須占用一片連續(xù)的單元。B.線性表采用順序,便于進(jìn)行和刪除操作C.線性表采用,不必占用一片連續(xù)的單元。D.線性表采用,便于和刪除操作。2.若長度為n的線性表采用順序結(jié)構(gòu),在其第i個(gè)位置一個(gè)新元素的算法的時(shí)間復(fù)雜為 )(1<=i<=n+1)?!竞娇蘸教齑髮W(xué)A.O( B.O( C.O( D.O(n2四、本講小本講主要講解了:線性表的基本概念和常用操作、線性表的順序方式。??碱}型:選擇題,綜合分析題。應(yīng)試方法:理解并熟練掌握線性表的順序方式和線性表的基本運(yùn)算在現(xiàn)行方式下在實(shí)現(xiàn)方法。第2~、考試分考重點(diǎn)與難考試中常見題復(fù)習(xí)思路與方線性表的鏈?zhǔn)浇Y(jié)構(gòu)?綜?式存二、考點(diǎn)講2.3 線性表的鏈?zhǔn)奖硎揪€性表鏈?zhǔn)浇Y(jié)構(gòu)的特點(diǎn):用一組任意的單元線性表的元素,不要求邏輯上相鄰的元素在物理位置上也相鄰刪除時(shí)不需移動大量元素;失去順序表可隨機(jī)存取的優(yōu)點(diǎn)。例,整數(shù)數(shù)組a[3]={3,5,6}1.線性鏈表(單鏈表結(jié)點(diǎn):數(shù)據(jù)元素的映象數(shù)據(jù)域用來結(jié)點(diǎn)的值指針域用來數(shù)據(jù)元素的直接后繼的地址(或位置)頭指指示鏈表中第一個(gè)結(jié)點(diǎn)的位置,單鏈表可由頭指針唯一確定單鏈表的映頭結(jié)在鏈表的第一個(gè)結(jié)點(diǎn)之前附設(shè)一個(gè)結(jié)點(diǎn),頭指針指向頭結(jié)點(diǎn)。設(shè)置頭結(jié)點(diǎn)的目的是空表與非空表的操作,簡化鏈表操作的實(shí)現(xiàn)。首元結(jié)鏈表中線性表中第一個(gè)數(shù)據(jù)元素的結(jié)點(diǎn)鏈表結(jié)構(gòu)描述:TypedefstructLNode{ElemTypestruct 單鏈表基本運(yùn)算實(shí)現(xiàn)(1)初始化線性表InitList(該運(yùn)算建立一個(gè)空的單鏈表,即創(chuàng)建一個(gè)頭結(jié)點(diǎn)。voidInitList(LinkListL){L=(LinkList)csizeof(LNode))創(chuàng)/創(chuàng)/L->next=}

建頭結(jié)(2)銷毀線性表DestroyList(單鏈表L占用的內(nèi)存空間。即逐一全部結(jié)點(diǎn)的空間?!丁稊?shù)據(jù)結(jié)構(gòu)》考研考點(diǎn)精講及復(fù)習(xí)思voidDestroyList(LinkList{LinkListp=L,q=p->next;while(q?。剑危眨蹋蹋?free(p)p=q;q=p->}free(p)}(3)判線性表是否為空表ListEmpty(若單鏈表L沒有數(shù)據(jù)結(jié)點(diǎn),則返回真,否則返回假。intListEmpty(LinkListL){return(L->next==NULL)}(4)求線性表的長度ListLength(L)返回單鏈表L中數(shù)據(jù)結(jié)點(diǎn)的個(gè)數(shù)。intListLength(LinkListL){LinkListp=L;inti=0;while(p->next?。剑危眨蹋蹋椋穑剑穑荆颍澹簦酰颍睿ǎ椋ǎ担┹敵鼍€性表DispList(逐一掃描單鏈表L的每個(gè)數(shù)據(jù)結(jié)點(diǎn),并顯示各結(jié)點(diǎn)的data域值。voidDispList(LinkListL){LinkListp=L->next;while(p!=NULL) printf("%c",p->data);p=p->next;}printf("\n")}(6)取表元StatustEmLinkListL,inti,ElemType{p=L->next;j=1;while(p&&j<i){p=p->next;++}if(?。穑辏荆椋颍澹簦酰颍睿牛遥遥希?;e=p->data;return}例,取第i=3個(gè)元素e=p->data=Sun時(shí)間復(fù)雜度:O(n)·在單鏈表第i個(gè)結(jié)點(diǎn)前一個(gè)結(jié)點(diǎn)的過(7)StatusListInsert(LinkList&L,inti,ElemType{p=L;j=while(p&&j<i-1){p=p->next;++j}if(!p||j>i-1) returnERROR;s= (LinkList)csizeof(LNode));s->data=e;s->next=p->next;p->next=s;return}·刪除單鏈表的第i個(gè)結(jié)點(diǎn)的過(8)刪StatusListDelete(LinkListLinti,ElemType{p=L;j=while(p->next&&j<i-1){p=p->next;++j}if(?。ǎ穑荆睿澹簦辏荆椋保颍澹簦酰颍睿牛遥遥希?;r=p->next;e=r->p->next=p->next-next;//(p->next=r->next;)free(r);returnOK;}·動態(tài)建立單鏈表的過(9)頭插法建CreateListH(LinkListLint{L=(LinkList)csizeof(LNode));L->next=NULL;for(i=n;i>0;--i)s=(LinkList)csizeof(LNode));scanf(&s->data);s->next=L->next;L->next=s;}}·法建(10)法建CreateListT(LinkListLint{tail=L=(LinkList)csizeof(LNode));L->next=NULL;for(i=n;i>0;--i)s=(LinkList)csizeof(LNode));scanf(&s->data);s->next=NULL;tail->next=s;①tail=s;}}(11)按元素值查找ateEmL,思路:在單鏈表L中從頭開始找第1個(gè)值域與e相等的結(jié)點(diǎn),若存在這樣的結(jié)點(diǎn),則返回位置,否則返回0。intoaeEmLinkListL,ElemType{LinkListp=L->next;intn=1;while(p?。剑危眨蹋蹋ΓΓ穑荆洌幔簦幔。?p=p->next;n++; if(p==NULL) return(0);elsereturn(n)}練習(xí):已知L是結(jié)點(diǎn)的非空單鏈表,指針p所指的結(jié)點(diǎn)既不是第一個(gè)結(jié)點(diǎn),也不是最后一個(gè)結(jié)點(diǎn)。刪除 p結(jié)點(diǎn)的直接后繼結(jié)點(diǎn)的語句序列q=p->next;p->next=q->next;free(q);刪除 p結(jié)點(diǎn)的直接前驅(qū)結(jié)點(diǎn)的語句序列q=L;while(q->next->next?。剑穑?q=q->next;s=q->next;q->next=p;free(s);刪除 p結(jié)點(diǎn)的語句序列q=L;while(q->next?。剑穑?q=q->next;q->next=p->next;free(p)刪除首元結(jié)點(diǎn)的語句序列q=L->next;L->next=q->next;free(q);刪除最后一個(gè)結(jié)點(diǎn)的語句序while(p->next->next?。剑危眨蹋蹋?p=p->next;q=p->next;p->next=NULL;free(q);鏈?zhǔn)浇Y(jié)構(gòu)的特點(diǎn)非隨機(jī)存貯結(jié)構(gòu),所以取表元素要慢于順序表。節(jié)約了大塊內(nèi)存適合于和刪除操實(shí)際上用空間換取了時(shí)間,結(jié)點(diǎn)中加入了指針,使得這兩種操作轉(zhuǎn)換為指針操作;2.靜態(tài)鏈表有些高級程序設(shè)計(jì)語言并沒有指針類型,如FORTRAN和JAVA。可以用數(shù)組來表示一個(gè)鏈表,稱為靜態(tài)鏈表。可定義如下#defineMAXSIZE //最多元素個(gè)數(shù)typedefstruct{ElemType cur;//游標(biāo),指示}pentSLinkList[XEi=s[i].cur;指針后移操lci=s[0].cur;第一個(gè)可用結(jié)點(diǎn)位if(s[0]. s[0].cur=s[i]. //k結(jié)s[k].cur=s[0].cur;[0].cur=Insert://將i插在r之s[i].cur=s[r].cur;s[r].cur=i;Delete:;//p為k的直接前驅(qū),s[p].cur=s[k].curFree(k);單鏈表基礎(chǔ)要點(diǎn)在單鏈表中,不能從當(dāng)前結(jié)點(diǎn)出發(fā)到任一結(jié)點(diǎn)在單鏈表中,刪除某一指定結(jié)點(diǎn)時(shí),必須找到該結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)線性表的鏈?zhǔn)浇Y(jié)構(gòu)是一種順序存取的結(jié)構(gòu),不具有隨機(jī)任一元素的特點(diǎn)設(shè)置頭結(jié)點(diǎn)的作用:使在鏈表的第一個(gè)位置上的操作和表中其它位置上的操作—致,無需進(jìn)行特殊處理,對空表和非空表的處理。循環(huán)鏈表循環(huán)鏈表是另一種形式的鏈?zhǔn)浇Y(jié)構(gòu)可從當(dāng)前結(jié)點(diǎn)出發(fā),到任一結(jié)點(diǎn)循環(huán)單鏈表多重循環(huán)鏈表。單循環(huán)鏈表設(shè)置尾指針rear,比設(shè)頭指針更好連接兩個(gè)只設(shè)尾指針的單循環(huán)鏈表L1和L2操作如下:p=R1">next;//保存L1的頭結(jié)點(diǎn)指針R1->next=R2->next->next;//頭尾連接free(R2->next);//第二個(gè)表的頭結(jié)R2->next=操作與線性單鏈表基本一致,差別只是在于算法中的循環(huán)結(jié)束條件不是p是否為空,而是p是否等于頭指針。例:取循環(huán)鏈表第i個(gè)元素StatusGetElemL( &e p=L->next;j=1while(p!=L&& j<i) p=p->next;++j;}if(p==L||j>i)returnERROR;e=p->data;return}雙鏈表希望查找前驅(qū)的時(shí)間復(fù)雜度達(dá)到O(1),可以用空間換時(shí)間,每個(gè)結(jié)點(diǎn)再加一個(gè)指向前驅(qū)的指針域,使鏈表可以進(jìn)行雙方向查找。用這種結(jié)點(diǎn)結(jié)構(gòu)組成的鏈表稱為雙向鏈表。結(jié)點(diǎn)的結(jié)構(gòu)圖雙向鏈表的邏輯表示雙向鏈表(DoubleLinkedList)類型描述typedefstructstructDuLNode

struct } 雙向循環(huán)鏈p->next->prior=p->prior->·雙向鏈表的前(后 操①s->prior=p-> ②p->prior->next=③s->next= ④p->prior=①s->next=q-> ②q->next->prior=③s->prior= ④q->next=雙向鏈表的刪除操①p->prior->next=p->②p->next->prior=p->刪除 p的直接后繼結(jié)點(diǎn)的語句序列q=p->next;p->next=p->next->next;p->next->prior=p;free(q)刪除 p的直接前驅(qū)結(jié)點(diǎn)的語句序列q=p->prior;p->prior=p->prior->prior;p->prior->next=p;free(q)《《數(shù)據(jù)結(jié)構(gòu)》考研考點(diǎn)精講及復(fù)習(xí)思return}②找結(jié)點(diǎn)的中序后繼結(jié)結(jié)點(diǎn)p,無右孩子,右指針指向其后繼,否則p的右子樹中“最左下”結(jié)點(diǎn)。BiThrTreePostNode(BiThrTreep){post=p->if(p->RTag==0)//有右孩子while(post->LTag==0)post=post->lchild;return}結(jié)點(diǎn)的線索二叉鏈表結(jié)點(diǎn)的中序線索二叉鏈表中序遍歷線索二叉樹 //0:有孩子;1:無孩子VoidInOrderTraverseThr(BiThrTree {p=T->lchild;while(p?。剑裕鳎瑁椋欤澹ǎ穑荆蹋裕幔纾剑剑埃穑剑穑荆欤悖瑁椋欤?;cout<<p->data<<“”;while((p->RTag==1)&&(p->rchild!=T) p=p->rchild;cout<<p->data<<“”;}p=p->}}建立線索化鏈表(以中序?yàn)槔茨撤N次序?qū)⒍骀湵砭€索化,實(shí)質(zhì)是在遍歷過程中用線索取代空指針對線索樹進(jìn)行遍歷,顯然其效率要比傳統(tǒng)方式高些。如果程序中經(jīng)常要進(jìn)行二叉樹的遍歷或者需要查找在遍歷過程中所的線性序列中前驅(qū)和后繼,此時(shí)應(yīng)當(dāng)采用線索鏈表表示。6. 樹和森1.樹的結(jié)構(gòu)(三種方法雙親表示法:用一組連續(xù)的空間來樹中的結(jié)點(diǎn),在保存每個(gè)結(jié)點(diǎn)的同時(shí)附設(shè)一個(gè)指示器來指示其雙親結(jié)點(diǎn)在表中的位置,其結(jié)點(diǎn)的結(jié)構(gòu)如下:樹的雙親結(jié)構(gòu)示意#defineMAXTREESIZE100typedefstructPTNode{TElem }PTNode;Typedefstruct{PTNodenodes[MAXTREESIZE] r, //根的位置和結(jié)點(diǎn)}雙親表示法的類型說明孩子表示法①定長結(jié)點(diǎn)長空鏈域個(gè)數(shù):nk"(n)=n(k-1)+②把每個(gè)結(jié)點(diǎn)的孩子結(jié)點(diǎn)排列起來,構(gòu)成一個(gè)單鏈表,稱為孩子鏈表。n個(gè)結(jié)點(diǎn)共有n個(gè)孩子鏈表(葉子結(jié)點(diǎn)的孩子鏈表為空表),而n個(gè)結(jié)點(diǎn)的數(shù)據(jù)和n個(gè)孩子鏈表的頭指針又組成一個(gè)順序表typedefstructCTNode{/孩子結(jié)點(diǎn)的定義 structCTNode}

該孩子結(jié)點(diǎn)性表中的位置/typedefstruct{TElemTypedata;

/順序表結(jié)點(diǎn)的結(jié)構(gòu)定 指 結(jié)點(diǎn)的信息指 FirstChild;}

向孩子鏈表的頭指 樹typedefstruct{ 的定 樹順 nodes[MAXTREESIZE]; 序 順根introot,num;根/}結(jié)孩子兄弟表示法typedefstructCSNode{ElemTypedata; 結(jié)

結(jié)點(diǎn)的位置和樹的結(jié)點(diǎn)個(gè)數(shù)第點(diǎn)信 第StructCSNodeFirstChild,NextSibling;}

—個(gè)孩子,下一個(gè)兄弟樹樹的孩子兄弟結(jié)構(gòu)示意2.樹、森林與二叉樹的相互轉(zhuǎn)·樹轉(zhuǎn)換為二叉(1)在所有相鄰兄弟結(jié)點(diǎn)之間加一水平連線(2)對每個(gè)非葉結(jié)點(diǎn)k,除了其最左邊的孩子結(jié)點(diǎn)外,刪去k與其他孩子結(jié)點(diǎn)的連線(3)所有水平線段以左邊結(jié)點(diǎn)為順時(shí)針旋轉(zhuǎn)45度,使之結(jié)構(gòu)層次分明。樹做這樣的轉(zhuǎn)換所構(gòu)成的二叉樹是唯一的。樹與二叉樹的對·森林轉(zhuǎn)換為二叉森林也可以方便地用孩子兄弟鏈表表示。森林轉(zhuǎn)換為二叉樹的方法如下(1)將森林中的每棵樹轉(zhuǎn)換成相應(yīng)的二叉樹(2)第一棵二叉樹不動,從第二棵二叉樹開始,依次把后一棵二叉樹的根結(jié)點(diǎn)作為前一棵二叉樹根結(jié)點(diǎn)的右孩子,當(dāng)所有二叉樹連在一起后,所得到的二叉樹就是由森林轉(zhuǎn)換得到的二叉樹。·二叉樹還原為樹或森將一棵二叉樹還原為樹或森林,具體方法如下《《數(shù)據(jù)結(jié)構(gòu)》考研考點(diǎn)精講及復(fù)習(xí)思(1)若某結(jié)點(diǎn)是其雙親的左孩子,則把該結(jié)點(diǎn)的右孩子、右孩子的右孩子……都與該結(jié)點(diǎn)的雙親結(jié)點(diǎn)用線連起來。(2)刪掉原二叉樹中所有雙親結(jié)點(diǎn)與右孩子結(jié)點(diǎn)的連線(3)整理由(1)、(2)兩步所得到的樹或森林,使之結(jié)構(gòu)層次分明二叉樹到森林的轉(zhuǎn)換示3.樹與森林的遍·樹的遍歷(兩種1)先根遍若樹非空,則遍歷方法為①根結(jié)點(diǎn)②從左到右,依次先根遍歷根結(jié)點(diǎn)的每一棵子樹。等同于轉(zhuǎn)換的二叉樹進(jìn)行先序遍歷先根遍歷序列ABECFHGD2)后根遍歷若樹非空,則遍歷方法為①從左到右,依次后根遍歷根結(jié)點(diǎn)的每一棵子樹②根結(jié)點(diǎn)等同于轉(zhuǎn)換的二叉樹進(jìn)行中序遍歷后根遍歷序列為EBHFGCDA·森林的遍歷(2種1)中序遍若森林非空,則遍歷方法為①森林中第一棵樹的根結(jié)點(diǎn)②先序遍歷第一棵樹的根結(jié)點(diǎn)的子樹森林③先序遍歷除去第一棵樹之后剩余的樹構(gòu)成的森林。先序遍歷序列為ABCDEFGHIJ等同于轉(zhuǎn)換的二叉樹進(jìn)行先序遍歷2)先序遍歷若森林非空,則遍歷方法為①中序遍歷森林中第一棵樹的根結(jié)點(diǎn)的子樹森林②第一棵樹的根結(jié)點(diǎn)③中序遍歷除去第一棵樹之后剩余的樹構(gòu)成的森林。中序遍歷序列為 等同于轉(zhuǎn)換的二叉樹進(jìn)行中序遍歷4.幾個(gè)問題①給定樹的先根遍歷序列和后根遍歷序列可唯一畫出一棵樹。先根遍歷序列:ABECFHGD后根遍歷序列:EBHFGCD②給定森林的先序遍歷序列和中序遍歷序列可唯一確定一森林。先序遍歷序列:ABCDEFGHIJ中序遍歷序列:BCDAFEHJI③關(guān)于二叉樹的先序、中序和后序遍歷序列確定二叉樹的問題·任何n(n0個(gè)不同結(jié)點(diǎn)的二叉樹,都可由它的中序序列和先序序列唯一地確定證明先序序列是a1a2…an中序序列是b1b2…bn根結(jié)點(diǎn):a在中序序列中與a同的結(jié)點(diǎn)為:bj{b1…bj-1}bj{bj+1…bn}←→a1{a2…ak}{ak+1…an例已知先序序列為ABDGCEF,中序序列為·任何n(n>0)個(gè)不同結(jié)點(diǎn)的二叉樹,都可由它的中序序列和后序序列唯一地確定。證明:后序序列是a1a2…an中序序列是b1b2…bn根結(jié)點(diǎn):an在中序序列中與an同的結(jié)點(diǎn)為:bj{b1…bj-1}bj{bj+1…bn}←→a1a2…ak}{ak+1…an-1}an例后序序列為GDBEFCA,中序序列為DGBAECF6.5樹與等價(jià)問離散數(shù)學(xué)中的定等價(jià)關(guān)系:若集合S中的關(guān)系R是自反的、對稱的和傳遞的,則稱為等價(jià)關(guān)系等價(jià)類:R是集合S的等價(jià)關(guān)系,由[x]R={y|y∈S∧y給出的集合[x]R稱為由x生成的一個(gè)R等價(jià)類。劃分:R是S上的等價(jià)關(guān)系,可以按R將S劃分為若干不相交的子集……,它們的并即為S,則這些子集Si是S的R等價(jià)類。如何劃分等價(jià)類假設(shè)集合S有n個(gè)元素,m個(gè)形如(x,y)的等價(jià)偶對確定了等價(jià)關(guān)系R,求S的劃分。一種算法:1)令S中每個(gè)元素各自形成一個(gè)只含單個(gè)成員的子集,記為…,Sn2)重復(fù)讀入m個(gè)偶對,對每個(gè)偶對(x,y),判斷x和y所屬的子集,設(shè)x∈S,y∈S,若SiS,則將Sj入Si并置Sj空。處理完m個(gè)偶對后剩下的非空子集就是S的R等價(jià)類。劃分等價(jià)類需要的操作:1)構(gòu)造只含單個(gè)元素的集合2)判定某個(gè)元素所屬集合3)合并兩個(gè)互不相交的集FSt若S是FSe類型的集合,則它由子集Si構(gòu)成,∪…S=S。基本操作:Initial(&S,n,x1,x…,xn):構(gòu)造由n個(gè)子集構(gòu)成的集合S,每個(gè)子集只含單個(gè)元素。Find(S,x):查找x所屬的子集Siee&S,i,j):合并兩個(gè)不相交的集合SiSje類型的實(shí)現(xiàn)根據(jù)Find和Merge兩個(gè)操作的特點(diǎn),用樹來實(shí)現(xiàn)Set以森林F=(…,Tn)表示Se類型的集合S,每顆樹Ti示一個(gè)子集Si樹中每個(gè)結(jié)點(diǎn)表示子集中的一個(gè)成員x令每個(gè)結(jié)點(diǎn)中包含一個(gè)指向其雙親的指針約定根結(jié)點(diǎn)兼作子集的名稱集合的合并將一棵樹的根指向另一顆樹的根#defineMAXTREESIZE100typedefstructPTNode{TEl }PTNode;Typedefstruct{PTNodenodes[MAXTREESIZE];intr,n; //根的位置和結(jié)點(diǎn)數(shù)}TypedefPTreeStintfindmfset(MFSetS,int{if(i<1||i>S.n)return-for(j=i;S.nodes[j].parent>0;j=S.node[j]. return}Statusmergemfset(MFSetSinti,int{if(i<1||i>S.n||j<1||j>S.n)returnERROR;S.node[i].parent=j;return}時(shí)間復(fù)雜度分別為O(d)和O(1),d為樹的深(7)掌握線索二叉樹的概念和相關(guān)算法的實(shí)現(xiàn)(8)掌握哈夫曼樹的定義、哈夫曼樹的構(gòu)造過程和哈夫曼編碼產(chǎn)生方法(9)靈活運(yùn)用二叉樹這種數(shù)據(jù)結(jié)構(gòu)解決一些綜合應(yīng)用問題二、舉1.已知一棵二叉樹的前序遍歷結(jié)果為ABCDEF,中序遍歷結(jié)果為CBAEDF,則后序遍歷的結(jié)果 )【浙江大學(xué)A. B. C. D.不2.已知某二叉樹的后序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷是( 大學(xué)】A. B. C. D.3.一棵左子樹為空的二叉樹在先序線索化后,其中空的鏈域的個(gè)數(shù)是( )【合肥工業(yè)大學(xué)】A.不確定 B.0 C.1 D.24.若X是二叉中序線索樹中一個(gè)有左孩子的結(jié)點(diǎn),且X不為根,則X的前驅(qū)為( 大學(xué)】A.X的雙 B.X的右子樹中最左的結(jié)C.X的左子樹中最右結(jié) D.X的左子樹中最右葉節(jié)5.設(shè)F是一個(gè)森林,B是由F變換得的二叉樹。若F中有n個(gè)非終端結(jié)點(diǎn),則B中右指針域?yàn)榭盏慕Y(jié)點(diǎn)有( )個(gè)?!疚靼搽娮涌萍即髮W(xué)】A.n- B. C.n+ D.n+三、本講小線索二叉樹的概念和相關(guān)算法的實(shí)現(xiàn)。樹、森林與二叉樹的關(guān)系樹的簡單應(yīng)第3~、考點(diǎn)講情況:改進(jìn)方法Merge時(shí),總是將成員少的子集根結(jié)點(diǎn)指向含成員多的子集的修改結(jié)構(gòu),令根結(jié)點(diǎn)的parent域子集中所含成員數(shù)目的負(fù)可以將findmfset的復(fù)雜度降到O(logn)Statusmixmfset(eSinti,intj){if(i<1||i>S.n||j<1||j>S.n)returnif(S.nodes[i].parent>S.nodes[j].parent){S.nodes[j].parent+=S.nodes[i].parent;S.nodes[i].parent=}S.nodes[i].parent+=S.nodes[j].parent;S.nodes[j].parent=i;}return}進(jìn)一步的改進(jìn):Find時(shí)壓縮路當(dāng)所查元素不在第二層時(shí),將所有從根到該元素路徑上的元素都變成根結(jié)點(diǎn)的孩子intfixmfset(MFSetSinti){if(i<1||i>S.n)return-for(j=i;S.nodes[j].parent>0;j=S.node[j].parent) for(k=i;k! =j;k=t){t=S.nodes[k]. S.nodes[k].parent=}return}6.6 哈夫曼樹及其應(yīng)用1.哈夫曼樹①路徑長從樹中一個(gè)結(jié)點(diǎn)到另一個(gè)結(jié)點(diǎn)之間的分支構(gòu)成這兩個(gè)結(jié)點(diǎn)之間的路徑,路徑上的分支數(shù)目稱做路徑長度。②樹的路徑長從樹根到每一結(jié)點(diǎn)的路徑長度之和③結(jié)點(diǎn)的權(quán)和帶權(quán)路徑長給樹的每個(gè)結(jié)點(diǎn)賦予一個(gè)具有某種實(shí)際意義的實(shí)數(shù),稱該實(shí)數(shù)為這個(gè)結(jié)點(diǎn)的權(quán)。在樹形結(jié)構(gòu)中,把從樹根到某一結(jié)點(diǎn)的路徑長度與該結(jié)點(diǎn)的權(quán)的乘積,叫做該結(jié)點(diǎn)的帶權(quán)路徑長度。④樹的帶權(quán)路徑長度WPL(WeightPathLengthofTree)樹中所有葉子結(jié)點(diǎn)的帶權(quán)路徑長度之和,通常記為:wn∑WPLwn∑k1kLa)=7×2+5×2+2×2+4×2=36Lb)=4×2+7×3+5×3+2×1=46Lc)=7×1+5×2+2×3+4×3=35⑤哈夫曼樹(最優(yōu)二叉樹設(shè)二叉樹具有n個(gè)帶權(quán)值的葉子結(jié)點(diǎn),那么從根結(jié)點(diǎn)到各個(gè)葉子結(jié)點(diǎn)的路徑長度與相應(yīng)結(jié)點(diǎn)權(quán)值的乘積的和,叫做二叉樹的帶權(quán)路徑長度。具有最小帶權(quán)路徑長度的二叉樹稱為哈夫曼樹2.構(gòu)造哈夫曼樹(哈夫曼算法1)由給定的n個(gè)權(quán)值{...,Wn},構(gòu)造n棵只有一個(gè)葉子結(jié)點(diǎn)的二叉樹,從而得到一個(gè)二2)在F中選取根結(jié)點(diǎn)的權(quán)值最小和次小的兩棵二叉樹作為左、右子樹構(gòu)造一棵新的二叉樹,這棵新的二叉樹根結(jié)點(diǎn)的權(quán)值為其左、右子樹根結(jié)點(diǎn)權(quán)值之和;3)在集合F中刪除作為左、右子樹的兩棵二叉樹,并將新建立的二叉樹加入到集合F中;4)重復(fù)(2)、(3)兩步,當(dāng)F中只剩下一棵二叉樹時(shí),這棵二叉樹便是所要建立的哈夫曼樹。給定權(quán)值w=(1,3,5,7)來構(gòu)造一棵哈夫曼樹3.哈夫曼編碼1)編碼例,傳送ABACCD,四種字符,可以分別編碼為00,01,10,11。則原電文轉(zhuǎn)換為000100101011。對方接收后,采用二位一分進(jìn)行譯碼當(dāng)然,為電文編碼時(shí),總是希望總長越短越好如果對每個(gè)字符設(shè)計(jì)長度不等的編碼,且讓電文中出現(xiàn)次數(shù)較多的字符

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論