當(dāng)工作或?qū)W習(xí)進(jìn)行到一定階段或告一段落時(shí),需要回過頭來對(duì)所做的工作認(rèn)真地分析研究一下,肯定成績(jī),,找出問題,,歸納出經(jīng)驗(yàn)教訓(xùn),提高認(rèn)識(shí),,明確方向,,以便進(jìn)一步做好工作,,并把這些用文字表述出來,,就叫做總結(jié),。寫總結(jié)的時(shí)候需要注意什么呢?有哪些格式需要注意呢,?以下是小編為大家收集的總結(jié)范文,,僅供參考,大家一起來看看吧,。
數(shù)據(jù)結(jié)構(gòu)第二章知識(shí)點(diǎn)總結(jié)篇一
第九章 查找
查找的同時(shí)對(duì)表做修改操作(如插入或刪除)則相應(yīng)的表稱之為動(dòng)態(tài)查找表,,否則稱之為靜態(tài)查找表。
衡量查找算法效率優(yōu)劣的標(biāo)準(zhǔn)是在查找過程中對(duì)關(guān)鍵字需要執(zhí)行的平均比較次數(shù)(即平均查找長(zhǎng)度asl),。
線性表查找的方法:
·順序查找:逐個(gè)查找,,asl=(n+1)/2;
·二分查找:取中點(diǎn)int(n/2)比較,若小就比左區(qū)間,,大就比右區(qū)間,。用二叉判定樹表示。asl=(∑(每層結(jié)點(diǎn)數(shù)*層數(shù)))/n;·分塊查找:要求“分塊有序”,,將表分成若干塊內(nèi)部不一定有序,,并抽取各塊中的最大關(guān)鍵字及其位置建立有序索引表。
二叉排序樹(bst)定義是二叉排序樹是空樹或者滿足如下性質(zhì)的二叉樹:
·若它的左子樹非空,,則左子樹上所有結(jié)點(diǎn)的值均小于根結(jié)點(diǎn)的值;
·若它的右子樹非空,,則右子樹上所有結(jié)點(diǎn)的值均大于根結(jié)點(diǎn)的值;
·左、右子樹本身又是一棵二叉排序樹,。
二叉排序樹的插入,、建立、刪除的算法平均時(shí)間性能是o(nlog2n),。
二叉排序樹的刪除操作可分三種情況進(jìn)行處理:
·*p是葉子,,則直接刪除*p,即將*p的雙親*parent中指向*p的指針域置空即可,。
·*p只有一個(gè)孩子*child,,此時(shí)只需將*child和*p的雙親直接連接就可刪去*p。
·*p有兩個(gè)孩子,,則先將*p結(jié)點(diǎn)的中序后繼結(jié)點(diǎn)的數(shù)據(jù)到*p,,刪除中序后繼結(jié)點(diǎn)。
關(guān)于b-樹(多路平衡查找樹),。它適合在磁盤等直接存取設(shè)備上組織動(dòng)態(tài)的查找表,,是一種外查找算法。建立的方式是從下向上拱起,。散列技術(shù):將結(jié)點(diǎn)按其關(guān)鍵字的散列地址存儲(chǔ)到散列表的過程稱為散列,。
散列函數(shù)的選擇有兩條標(biāo)準(zhǔn):簡(jiǎn)單和均勻,。
常見的散列函數(shù)構(gòu)的造方法:
·平方取中法:hash=int((x^2)0)
·除余法:表長(zhǎng)為m,hash=x%m
·相乘取整法:hash=int(m*(x*a-int(x*a));a=0.618
·隨機(jī)數(shù)法:hash=random(x),。
處理沖突的方法:
開放定址法: 一般形式為hi=(h(key)+di)%m1≤i≤m-1,,開放定址法要求散列表的裝填因子α≤1。
·開放定址法類型:
·線性探查法:address=(hash(x)+i)%m;·二次探查法:address=(hash(x)+i^2)%m;
·雙重散列法:address=(hash(x)+i*hash(y))%m;
·拉鏈法: 是將所有關(guān)鍵字為同義詞的結(jié)點(diǎn)鏈接在同一個(gè)單鏈表中,。
·拉鏈法的優(yōu)點(diǎn):
·拉鏈法處理沖突簡(jiǎn)單,,且無堆積現(xiàn)象;
·鏈表上的結(jié)點(diǎn)空間是動(dòng)態(tài)申請(qǐng)的適于無法確定表長(zhǎng)的情況;
·拉鏈法中α可以大于1,結(jié)點(diǎn)較大時(shí)其指針域可忽略,,因此節(jié)省空間;
·拉鏈法構(gòu)造的散列表刪除結(jié)點(diǎn)易實(shí)現(xiàn),。
·拉鏈法也有缺點(diǎn):當(dāng)結(jié)點(diǎn)規(guī)模較小時(shí),用拉鏈法中的指針域也要占用額外空間,,還是開放定址法省空間,。
第十章 文件
文件是性質(zhì)相同的記錄的集合,。記錄是文件中存取的基本單位,,數(shù)據(jù)項(xiàng)是文件可使用的最小單位,數(shù)據(jù)項(xiàng)有時(shí)稱字段或者屬性,。
文件
·邏輯結(jié)構(gòu)是一種線性結(jié)構(gòu),。
·操作有:檢索和維護(hù)。并有實(shí)時(shí)和批量處理兩種處理方式,。
文件
·存儲(chǔ)結(jié)構(gòu)是指文件在外存上的組織方式,。
·基本的組織方式有:順序組織、索引組織,、散列組織和鏈組織,。
·常用的文件組織方式:順序文件、索引文件,、散列文件和多關(guān)鍵字文件,。
評(píng)價(jià)一個(gè)文件組織的效率,是執(zhí)行文件操作所花費(fèi)的時(shí)間和文件組織所需的存儲(chǔ)空間,。
檢索功能的多寡和速度的快慢,,是衡量文件操作質(zhì)量的重要標(biāo)志。
順序文件是指按記錄進(jìn)入文件的先后順序存放,、其邏輯順序和物理順序一致的文件,。主關(guān)鍵字有序稱順序有序文件,否則稱順序無序文件,。
一切存儲(chǔ)在順序存儲(chǔ)器(如磁帶)上的文件都只能順序文件,,只能按順序查找法存取。順序文件的插入,、刪除和修改只能通過復(fù)制整個(gè)文件實(shí)現(xiàn),。
索引文件的組織方式:通常是在主文件之外建立一張索引表指明邏輯記錄和物理記錄之間一一對(duì)應(yīng)的關(guān)系,,它和主文件一起構(gòu)成索引文件。
索引非順序文件中的索引表為稠密索引,。索引順序文件中的索引表為稀疏索引,。
若記錄很大使得索引表也很大時(shí),可對(duì)索引表再建立索引,,稱為查找表,。是一種靜態(tài)索引。
索引順序文件常用的有兩種:
·isam索引順序存取方法:是專為磁盤存取文件設(shè)計(jì)的,,采用靜態(tài)索引結(jié)構(gòu),。
·vsam虛擬存儲(chǔ)存取方法:采用b+樹作為動(dòng)態(tài)索引結(jié)構(gòu),由索引集,、順序集,、數(shù)據(jù)集組成。
散列文件是利用散列存儲(chǔ)方式組織的文件,,亦稱為直接存取文件,。
散列文件
·優(yōu)點(diǎn)是:文件隨機(jī)存放,記錄不需要排序;插入刪除方便;存取速度快;不需要索引區(qū),,節(jié)省存儲(chǔ)空間,。
·缺點(diǎn)是:不能進(jìn)行順序存取,只能按關(guān)鍵字隨機(jī)存取,,且詢問方式限地簡(jiǎn)單詢問,,需要重新組織文件。
多重表文件:對(duì)需要查詢的次關(guān)鍵字建立相應(yīng)的索引,,對(duì)相同次關(guān)鍵字的記錄建一個(gè)鏈表并將鏈表頭指針,、長(zhǎng)度、次關(guān)鍵字作為索引表的索引項(xiàng),。
倒排表:次關(guān)鍵字索引表稱倒排表,,主文件和倒排表構(gòu)成倒排文件。
數(shù)據(jù)結(jié)構(gòu)第二章知識(shí)點(diǎn)總結(jié)篇二
2010年自學(xué)考試《數(shù)據(jù)結(jié)構(gòu)》各章復(fù)習(xí)要點(diǎn)總結(jié)(2)2010年自學(xué)考試《數(shù)據(jù)結(jié)構(gòu)》四至六章復(fù)習(xí)要點(diǎn)總結(jié),。
第四章 串
串是零個(gè)或多個(gè)字符組成的有限序列,。
·空串:是指長(zhǎng)度為零的串,也就是串中不包含任何字符(結(jié)點(diǎn)),。
·空白串:指串中包含一個(gè)或多個(gè)空格字符的串,。
·在一個(gè)串中任意個(gè)連續(xù)字符組成的子序列稱為該串的子串,包含子串的串就稱為主串,。
·子串在主串中的序號(hào)就是指子串在主串中首次出現(xiàn)的位置,。
·空串是任意串的子串,任意串是自身的子串,。
串分為兩種:
·串常量在程序中只能引用不能改變;
·串變量的值可以改變,。
串的基本運(yùn)算有:
·求串長(zhǎng)strlen(char*s)
·串復(fù)制strcpy(char*to,,char*from)
·串聯(lián)接strcat(char*to,char*from)
·串比較charcmp(char*s1,,char*s2)
·字符定位strchr(char*s,,charc)
。串是特殊的線性表(結(jié)點(diǎn)是字符),,所以串的存儲(chǔ)結(jié)構(gòu)與線性表的存儲(chǔ)結(jié)構(gòu)類似,。串的順序存儲(chǔ)結(jié)構(gòu)簡(jiǎn)稱為順序串。
順序串又可按存儲(chǔ)分配的不同分為:
·靜態(tài)存儲(chǔ)分配:直接用定長(zhǎng)的字符數(shù)組來定義,。優(yōu)點(diǎn)是涉及串長(zhǎng)的操作速度快,,但不適合插入、鏈接操作,。
·動(dòng)態(tài)存儲(chǔ)分配:是在定義串時(shí)不分配存儲(chǔ)空間,,需要使用時(shí)按所需串的長(zhǎng)度分配存儲(chǔ)單元。
串的鏈?zhǔn)酱鎯?chǔ)就是用單鏈表的方式存儲(chǔ)串值,,串的這種鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)簡(jiǎn)稱為鏈串,。鏈串與單鏈表的差異只是它的結(jié)點(diǎn)數(shù)據(jù)域?yàn)閱蝹€(gè)字符。
為了解決“存儲(chǔ)密度”低的狀況,,可以讓一個(gè)結(jié)點(diǎn)存儲(chǔ)多個(gè)字符,,即結(jié)點(diǎn)的大小,。
順序串上子串定位的運(yùn)算:又稱串的“模式匹配”或“串匹配”,,是在主串中查找出子串出現(xiàn)的位置。在串匹配中,,將主串稱為目標(biāo)(串),,子串稱為模式(串)。這是比較容易理解的,,串匹配問題就是找出給定模式串p在給定目標(biāo)串t中首次出現(xiàn)的有效位移或者是全部有效位移,。最壞的情況下時(shí)間復(fù)雜度是o((n-m+1)m),假如m與n同階的話則它是o(n^2),。鏈串上的子串定位運(yùn)算位移是結(jié)點(diǎn)地址而不是整數(shù),。
第五章 多維數(shù)組和廣義表
數(shù)組一般用順序存儲(chǔ)的方式表示。存儲(chǔ)的方式有:
·行優(yōu)先順序,,也就是把數(shù)組逐行依次排列,。pascal、c
·列優(yōu)先順序,,就是把數(shù)組逐列依次排列,。fortran
地址的計(jì)算方法:
·按行優(yōu)先順序排列的數(shù)組:loca(ij)=loca(11)+((i-1)*n+(j-1))*d.·按列優(yōu)先順序排列的數(shù)組:loca(ij)=loca(11)+((j-1)*n+(i-1))*d.矩陣的壓縮存儲(chǔ):為多個(gè)相同的非零元素分配一個(gè)存儲(chǔ)空間;對(duì)零元素不分配空間。
特殊矩陣的概念:所謂特殊矩陣是指非零元素或零元素分布有一定規(guī)律的矩陣,。
稀疏矩陣的概念:一個(gè)矩陣中若其非零元素的個(gè)數(shù)遠(yuǎn)遠(yuǎn)小于零元素的個(gè)數(shù),,則該矩陣稱為稀疏矩陣,。
特殊矩陣的類型:
·對(duì)稱矩陣:滿足a(ij)=a(ji)。元素總數(shù)n(n+1)/2.i=max(i,,j),,j=min(i,j),,loca(ij)=loc(sa[0])+(i*(i+1)/2+j)*d.·三角矩陣:
·上三角陣:k=i*(2n-i+1)/2+j-i,,loca(ij)=loc(sa[0])+k*d.·下三角陣:k=i*(i+1)/2+j,loca(ij)=loc(sa[0])+k*d.·對(duì)角矩陣:k=2i+j,,loca(ij)=loc(sa[0])+k*d.稀疏矩陣的壓縮存儲(chǔ)方式用三元組表把非零元素的值和它所在的行號(hào)列號(hào)做為一個(gè)結(jié)點(diǎn)存放在一起,,用這些結(jié)點(diǎn)組成的一個(gè)線性表來表示。但這種壓縮存儲(chǔ)方式將失去隨機(jī)存儲(chǔ)功能,。加入行表記錄每行的非零元素在三元組表中的起始位置,,即帶行表的三元組表。
廣義表是n(n≥0)個(gè)元素的有限序列,,其中的元素是原子或者是一個(gè)廣義表,。
廣義表表頭和表尾的概念:
·若廣義表ls非空(n≥1),則這個(gè)廣義表的第一個(gè)元素就是表頭,。
·其余的元素組成的表稱為ls的表尾,,所以表尾必是一個(gè)子表。
廣義表有兩種表示法,,一種是括號(hào)表示法,,一種是圖形表示法。
廣義表與樹(形結(jié)構(gòu))相對(duì)應(yīng),,這個(gè)廣義表就是純表,。
如果一個(gè)廣義表的結(jié)點(diǎn)又可以被其他結(jié)點(diǎn)所共享,則這個(gè)表稱為再入表,。
允許遞歸的表稱為遞歸表,。
線性表∈純表(樹)∈再入表∈遞歸表??梢?,廣義表是對(duì)線性表和樹的推廣。
廣義表有兩個(gè)特殊的基本運(yùn)算:
·取表頭head(ls):取表中的第一個(gè)數(shù)據(jù)元素,,不能對(duì)空表操作,。
·取表尾tail(ls);取除表頭外,其余數(shù)據(jù)元素構(gòu)成的子表,,不能對(duì)空表操作,。
第六章 樹
樹是n個(gè)結(jié)點(diǎn)的有限集合,非空時(shí)必須滿足:只有一個(gè)稱為根的結(jié)點(diǎn);其余結(jié)點(diǎn)形成m個(gè)不相交的子集,,并稱根的子樹,。
根是開始結(jié)點(diǎn);結(jié)點(diǎn)的子樹數(shù)稱度;度為0的結(jié)點(diǎn)稱葉子(終端結(jié)點(diǎn));度不為0的結(jié)點(diǎn)稱分支結(jié)點(diǎn)(非終端結(jié)點(diǎn));除根外的分支結(jié)點(diǎn)稱內(nèi)部結(jié)點(diǎn);
有序樹是子樹有左,,右之分的樹;無序樹是子樹沒有左,右之分的樹;森林是m個(gè)互不相交的樹的集合;
樹的四種不同表示方法:
·樹形表示法;
·嵌套集合表示法;
·凹入表示法;
·廣義表表示法,。
二叉樹的定義:是n≥0個(gè)結(jié)點(diǎn)的有限集,,它是空集(n=0)或由一個(gè)根結(jié)點(diǎn)及兩棵互不相交的分別稱作這個(gè)根的左子樹和右子樹的二叉樹組成。
二叉樹不是樹的特殊情形,,與度數(shù)為2的有序樹不同,。
二叉樹的4個(gè)重要性質(zhì):
·二叉樹上第i層上的結(jié)點(diǎn)數(shù)目最多為2^(i-1)(i≥1);
·深度為k的二叉樹至多有(2^k)-1個(gè)結(jié)點(diǎn)(k≥1);
·在任意一棵二叉樹中,若終端結(jié)點(diǎn)的個(gè)數(shù)為n0,,度為2的結(jié)點(diǎn)數(shù)為n2,,則n0=n2+1;
·具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度為int(log2n)+1。滿二叉樹是一棵深度為k,,結(jié)點(diǎn)數(shù)為(2^k)-1的二叉樹;完全二叉樹是滿二叉樹在最下層自右向左去處部分結(jié)點(diǎn);
二叉樹的順序存儲(chǔ)結(jié)構(gòu)就是把二叉樹的所有結(jié)點(diǎn)按照層次順序存儲(chǔ)到連續(xù)的存儲(chǔ)單元中,。(存儲(chǔ)前先將其畫成完全二叉樹)
樹的存儲(chǔ)結(jié)構(gòu)多用的是鏈?zhǔn)酱鎯?chǔ)。bintnode的結(jié)構(gòu)為lchild|data|rchild,,把所有bintnode類型的結(jié)點(diǎn),,加上一個(gè)指向根結(jié)點(diǎn)的bintree型頭指針就構(gòu)成了二叉樹的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),稱為二叉鏈表,。它就是由根指針root唯一確定的,。共有2n個(gè)指針域,n+1個(gè)空指針,。
根據(jù)訪問結(jié)點(diǎn)的次序不同可得三種遍歷:先序遍歷(前序遍歷或先根遍歷),,中序遍歷(或中根遍歷)、后序遍歷(或后根遍歷),。時(shí)間復(fù)雜度為o(n),。
利用二叉鏈表中的n+1個(gè)空指針域來存放指向某種遍歷次序下的前趨結(jié)點(diǎn)和后繼結(jié)點(diǎn)的指針,這些附加的指針就稱為“線索”,,加上線索的二叉鏈表就稱為線索鏈表。線索使得查找中序前趨和中序后繼變得簡(jiǎn)單有效,,但對(duì)于查找指定結(jié)點(diǎn)的前序前趨和后序后繼并沒有什么作用,。
樹和森林及二叉樹的轉(zhuǎn)換是唯一對(duì)應(yīng)的。
轉(zhuǎn)換方法:
·樹變二叉樹:兄弟相連,,保留長(zhǎng)子的連線,。
·二叉樹變樹:結(jié)點(diǎn)的右孩子與其雙親連。
·森林變二叉樹:樹變二叉樹,,各個(gè)樹的根相連,。
樹的存儲(chǔ)結(jié)構(gòu):
·有雙親鏈表表示法:結(jié)點(diǎn)data | parent,對(duì)于求指定結(jié)點(diǎn)的雙親或祖先十分方便,,但不適于求指定結(jié)點(diǎn)的孩子及后代,。
·孩子鏈表表示法:為樹中每個(gè)結(jié)點(diǎn)data | next設(shè)置一個(gè)孩子鏈表firstchild,,并將data | firstchild存放在一個(gè)向量中。
·雙親孩子鏈表表示法:將雙親鏈表和孩子鏈表結(jié)合,。
·孩子兄弟鏈表表示法:結(jié)點(diǎn)結(jié)構(gòu)leftmostchild |data | rightsibing,,附加兩個(gè)分別指向該結(jié)點(diǎn)的最左孩子和右鄰兄弟的指針域。樹的前序遍歷與相對(duì)應(yīng)的二叉樹的前序遍歷一致;樹的后序遍歷與相對(duì)應(yīng)的二叉樹的中序遍歷一致,。
樹的帶權(quán)路徑長(zhǎng)度是樹中所有葉結(jié)點(diǎn)的帶權(quán)路徑長(zhǎng)度之和,。樹的帶權(quán)路徑長(zhǎng)度最小的二叉樹就稱為最優(yōu)二叉樹(即哈夫曼樹)。
在葉子的權(quán)值相同的二叉樹中,,完全二叉樹的路徑長(zhǎng)度最短,。
哈夫曼樹有n個(gè)葉結(jié)點(diǎn),共有2n-1個(gè)結(jié)點(diǎn),,沒有度為1的結(jié)點(diǎn),,這類樹又稱為嚴(yán)格二叉樹。
變長(zhǎng)編碼技術(shù)可以使頻度高的字符編碼短,,而頻度低的字符編碼長(zhǎng),,但是變長(zhǎng)編碼可能使解碼產(chǎn)生二義性。如00,、01,、0001這三個(gè)碼無法在解碼時(shí)確定是哪一個(gè),所以要求在字符編碼時(shí)任一字符的編碼都不是其他字符編碼的前綴,,這種碼稱為前綴碼(其實(shí)是非前綴碼),。
哈夫曼樹的應(yīng)用最廣泛地是在編碼技術(shù)上,它能夠容易地求出給定字符集及其概率分布的最優(yōu)前綴碼,。哈夫曼編碼的構(gòu)造很容易,,只要畫好了哈夫曼樹,按分支情況在左路徑上寫代碼0,,右路徑上寫代碼1,,然后從上到下到葉結(jié)點(diǎn)的相應(yīng)路徑上的代碼的序列就是該結(jié)點(diǎn)的最優(yōu)前綴碼。
數(shù)據(jù)結(jié)構(gòu)第二章知識(shí)點(diǎn)總結(jié)篇三
11-12-2數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)指導(dǎo)
第一章:
知識(shí)點(diǎn):數(shù)據(jù)結(jié)構(gòu)的定義,;數(shù)據(jù)元素關(guān)系的基本結(jié)構(gòu)類型,;數(shù)據(jù)元素的不同存儲(chǔ)結(jié)構(gòu);算法的重要特性,;評(píng)價(jià)算法的重要指標(biāo),; 如何由程序代碼估算算法的復(fù)雜度(大o描述)。
第二章:
知識(shí)點(diǎn):線性表不同的存儲(chǔ)方式及其各自特點(diǎn),;順序表及鏈表的基本操作(插入,、刪除等)與其具體代碼實(shí)現(xiàn)。
第三章:
知識(shí)點(diǎn):棧和隊(duì)列的結(jié)構(gòu)特點(diǎn);二者基本操作的思想,;鏈隊(duì)列和循環(huán)隊(duì)列的基本操作,;循環(huán)隊(duì)列如何判空和判滿。
第四章:
知識(shí)點(diǎn):串的相關(guān)定義與基本操作,;模式匹配的定義與思想,。
第五章:
知識(shí)點(diǎn):數(shù)組的定義與順序?qū)崿F(xiàn)方式;數(shù)組順序存儲(chǔ)中元素地址的計(jì)算,;稀疏矩陣的壓縮存儲(chǔ)方式與元素地址的特點(diǎn),;廣義表的定義與基本操作(表頭,表尾,,判長(zhǎng)度,、深度)。
第六章:
知識(shí)點(diǎn):樹的基本術(shù)語,;(滿/完全)二叉樹的定義與各種性質(zhì)特點(diǎn),;二叉樹不同的存儲(chǔ)與遍歷方式;一般樹的存儲(chǔ)結(jié)構(gòu),;樹與森林的遍歷方式,;赫夫曼樹與編碼的求法。
第七章:
知識(shí)點(diǎn):(有向/無向/完全)圖的概念與其特點(diǎn),;(強(qiáng))聯(lián)通圖的定義與特點(diǎn),;圖的不同存儲(chǔ)結(jié)構(gòu)及其操作;圖的不同方式的遍歷,;最小生成樹的定義與其不同的求解方法,;拓?fù)渑判虻亩x與思想;關(guān)鍵(最短)路徑的定義與思想,。
第九章:
知識(shí)點(diǎn):順序查找,、折半查找的思想及其具體代碼實(shí)現(xiàn)和復(fù)雜度分析;索引查找的思想,;二叉排序樹的思想及操作,;平衡二叉樹的定義與操作;b-樹的定義與特點(diǎn),;哈希表(函數(shù))的定義,;哈希函數(shù)的構(gòu)造方法與處理沖突的方法。
第十章:
知識(shí)點(diǎn):各種排序方法的思想與其復(fù)雜度,、穩(wěn)定性分析。
注:以上涉及到的復(fù)雜度分析,,其推導(dǎo)過程不做要求,。
數(shù)據(jù)結(jié)構(gòu)第二章知識(shí)點(diǎn)總結(jié)篇四
數(shù)據(jù)結(jié)構(gòu)各章復(fù)習(xí)要點(diǎn)總結(jié)
第一章 概 論
數(shù)據(jù)就是指能夠被計(jì)算機(jī)識(shí)別、存儲(chǔ)和加工處理的信息的載體。
數(shù)據(jù)元素是數(shù)據(jù)的基本單位,,可以由若干個(gè)數(shù)據(jù)項(xiàng)組成,。數(shù)據(jù)項(xiàng)是具有獨(dú)立含義的最小標(biāo)識(shí)單位。
數(shù)據(jù)結(jié)構(gòu)的定義:
·邏輯結(jié)構(gòu):從邏輯結(jié)構(gòu)上描述數(shù)據(jù),,獨(dú)立于計(jì)算機(jī),。
·線性結(jié)構(gòu):一對(duì)一關(guān)系。
·線性結(jié)構(gòu):多對(duì)多關(guān)系,。
·存儲(chǔ)結(jié)構(gòu):是邏輯結(jié)構(gòu)用計(jì)算機(jī)語言的實(shí)現(xiàn),。
·順序存儲(chǔ)結(jié)構(gòu):如數(shù)組。
·鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu):如鏈表,。
·稠密索引:每個(gè)結(jié)點(diǎn)都有索引項(xiàng),。
·稀疏索引:每組結(jié)點(diǎn)都有索引項(xiàng)。
·散列存儲(chǔ)結(jié)構(gòu):如散列表,。
·對(duì)數(shù)據(jù)的操作:定義在邏輯結(jié)構(gòu)上,,每種邏輯結(jié)構(gòu)都有一個(gè)運(yùn)算集合。
·常用的有:檢索,、插入,、刪除、更新,、排序,。
·數(shù)據(jù)類型:是一個(gè)值的集合以及在這些值上定義的一組操作的總稱。
·原子類型:由語言提供,。
·結(jié)構(gòu)類型:由用戶借助于描述機(jī)制定義,,是導(dǎo)出類型。
抽象數(shù)據(jù)類型adt:
·是抽象數(shù)據(jù)的組織和與之的操作,。相當(dāng)于在概念層上描述問題,。
·優(yōu)點(diǎn)是將數(shù)據(jù)和操作封裝在一起實(shí)現(xiàn)了信息隱藏。
程序設(shè)計(jì)的實(shí)質(zhì)是對(duì)實(shí)際問題選擇一種好的數(shù)據(jù)結(jié)構(gòu),,設(shè)計(jì)一個(gè)好的算法,。算法取決于數(shù)據(jù)結(jié)構(gòu)。
算法是一個(gè)良定義的計(jì)算過程,,以一個(gè)或多個(gè)值輸入,,并以一個(gè)或多個(gè)值輸出。
評(píng)價(jià)算法的好壞的因素:
·算法是正確的;
·執(zhí)行算法的時(shí)間;
·執(zhí)行算法的存儲(chǔ)空間(主要是輔助存儲(chǔ)空間);
·算法易于理解,、編碼,、調(diào)試。
時(shí)間復(fù)雜度:是某個(gè)算法的時(shí)間耗費(fèi),,它是該算法所求解問題規(guī)模n的函數(shù),。
漸近時(shí)間復(fù)雜度:是指當(dāng)問題規(guī)模趨向無窮大時(shí),該算法時(shí)間復(fù)雜度的數(shù)量級(jí)。
評(píng)價(jià)一個(gè)算法的時(shí)間性能時(shí),,主要標(biāo)準(zhǔn)就是算法的漸近時(shí)間復(fù)雜度,。
算法中語句的頻度不僅與問題規(guī)模有關(guān),還與輸入實(shí)例中各元素的取值相關(guān),。
時(shí)間復(fù)雜度按數(shù)量級(jí)遞增排列依次為:常數(shù)階o(1),、對(duì)數(shù)階o(log2n)、線性階o(n),、線性對(duì)數(shù)階o(nlog2n),、平方階o(n^2)、立方階o(n^3),、……k次方階o(n^k),、指數(shù)階o(2^n)。
空間復(fù)雜度:是某個(gè)算法的空間耗費(fèi),,它是該算法所求解問題規(guī)模n的函數(shù),。
算法的時(shí)間復(fù)雜度和空間復(fù)雜度合稱算法復(fù)雜度。
第二章 線性表
線性表是由n≥0個(gè)數(shù)據(jù)元素組成的有限序列,。n=0是空表;非空表,,只能有一個(gè)開始結(jié)點(diǎn),有且只能有一個(gè)終端結(jié)點(diǎn),。
線性表上定義的基本運(yùn)算:
·構(gòu)造空表:initlist(l)
·求表長(zhǎng):listlength(l)
·取結(jié)點(diǎn):getnode(l,,i)
·查找:locatenode(l,x)
·插入:insertlist(l,,x,,i)
·刪除:delete(l,i)
順序表是按線性表的邏輯結(jié)構(gòu)次序依次存放在一組地址連續(xù)的存儲(chǔ)單元中,。在存儲(chǔ)單元中的各元素的物理位置和邏輯結(jié)構(gòu)中各結(jié)點(diǎn)相鄰關(guān)系是一致的,。地址計(jì)算:loca(i)=loca(1)+(i-1)*d;(首地址為1)/考試 大收集整理/
在順序表中實(shí)現(xiàn)的基本運(yùn)算:
·插入:平均移動(dòng)結(jié)點(diǎn)次數(shù)為n/2;平均時(shí)間復(fù)雜度均為o(n)。
·刪除:平均移動(dòng)結(jié)點(diǎn)次數(shù)為(n-1)/2;平均時(shí)間復(fù)雜度均為o(n),。
線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)中結(jié)點(diǎn)的邏輯次序和物理次序不一定相同,,為了能正確表示結(jié)點(diǎn)間的邏輯關(guān)系,在存儲(chǔ)每個(gè)結(jié)點(diǎn)值的同時(shí),,還存儲(chǔ)了其后繼結(jié)點(diǎn)的地址信息(即指針或鏈),。這兩部分信息組成鏈表中的結(jié)點(diǎn)結(jié)構(gòu)。一個(gè)單鏈表由頭指針的名字來命名,。
單鏈表運(yùn)算:
·建立單鏈表
·頭插法:s->next=head;head=s;生成的順序與輸入順序相反,。平均時(shí)間復(fù)雜度均為o(n)。
·尾插法:head=rear=null;if(head=null)head=s;else r->next=s;r=s;平均時(shí)間復(fù)雜度均為o(n)
·加頭結(jié)點(diǎn)的算法:對(duì)開始結(jié)點(diǎn)的操作無需特殊處理,,統(tǒng)一了空表和非空表,。
·查找
·按序號(hào):與查找位置有關(guān),,平均時(shí)間復(fù)雜度均為o(n),。
·按值:與輸入實(shí)例有關(guān),,平均時(shí)間復(fù)雜度均為o(n)。
·插入運(yùn)算:p=getnode(l,,i-1);s->next=p->next;p->next=s;平均時(shí)間復(fù)雜度均為o(n)
·刪除運(yùn)算:p=getnode(l,,i-1);r=p->next;p->next=r->next;free(r);平均時(shí)間復(fù)雜度均為o(n)
單循環(huán)鏈表是一種首尾相接的單鏈表,終端結(jié)點(diǎn)的指針域指向開始結(jié)點(diǎn)或頭結(jié)點(diǎn),。鏈表終止條件是以指針等于頭指針或尾指針,。
采用單循環(huán)鏈表在實(shí)用中多采用尾指針表示單循環(huán)鏈表。優(yōu)點(diǎn)是查找頭指針和尾指針的時(shí)間都是o(1),,不用遍歷整個(gè)鏈表,。
雙鏈表就是雙向鏈表,就是在單鏈表的每個(gè)結(jié)點(diǎn)里再增加一個(gè)指向其直接前趨的指針域prior,,形成兩條不同方向的鏈,。由頭指針head惟一確定。
雙鏈表也可以頭尾相鏈接構(gòu)成雙(向)循環(huán)鏈表,。
雙鏈表上的插入和刪除時(shí)間復(fù)雜度均為o(1),。
順序表和鏈表的比較:
·基于空間:
·順序表的存儲(chǔ)空間是靜態(tài)分配,存儲(chǔ)密度為1;適于線性表事先確定其大小時(shí)采用,。
·鏈表的存儲(chǔ)空間是動(dòng)態(tài)分配,,存儲(chǔ)密度<1;適于線性表長(zhǎng)度變化大時(shí)采用。
·基于時(shí)間:
·順序表是隨機(jī)存儲(chǔ)結(jié)構(gòu),,當(dāng)線性表的操作主要是查找時(shí),,宜采用。
·以插入和刪除操作為主的線性表宜采用鏈表做存儲(chǔ)結(jié)構(gòu),。
·若插入和刪除主要發(fā)生在表的首尾兩端,,則宜采用尾指針表示的單循環(huán)鏈表。
第三章 棧和隊(duì)列
棧(stack)是僅限制在表的一端進(jìn)行插入和刪除運(yùn)算的線性表,,稱插入,、刪除這一端為棧頂,另一端稱為棧底,。表中無元素時(shí)為空棧,。棧的修改是按后進(jìn)先出的原則進(jìn)行的,我們又稱棧為lifo表(last in first out),。通常棧有順序棧和鏈棧兩種存儲(chǔ)結(jié)構(gòu),。
棧的基本運(yùn)算有六種:
·構(gòu)造空棧:initstack(s)
·判棧空:stackempty(s)
·判棧滿:stackfull(s)
·進(jìn)棧:push(s,,x)
·退棧:pop(s)
·取棧頂元素:stacktop(s)在順序棧中有“上溢”和“下溢”的現(xiàn)象,。
·“上溢”是棧頂指針指出棧的外面是出錯(cuò)狀態(tài),。
·“下溢”可以表示棧為空棧,因此用來作為控制轉(zhuǎn)移的條件,。
順序棧中的基本操作有六種:
·構(gòu)造空棧
·判???/p>
·判棧滿
·進(jìn)棧
·退棧
·取棧頂元素
鏈棧則沒有上溢的限制,因此進(jìn)棧不要判棧滿,。鏈棧不需要在頭部附加頭結(jié)點(diǎn),,只要有鏈表的頭指針就可以了。
鏈棧中的基本操作有五種:
·構(gòu)造空棧
·判???/p>
·進(jìn)棧
·退棧
·取棧頂元素
隊(duì)列(queue)是一種運(yùn)算受限的線性表,,插入在表的一端進(jìn)行,而刪除在表的另一端進(jìn)行,,允許刪除的一端稱為隊(duì)頭(front),,允許插入的一端稱為隊(duì)尾(rear),隊(duì)列的操作原則是先進(jìn)先出的,,又稱作fifo表(first in first out).隊(duì)列也有順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)兩種存儲(chǔ)結(jié)構(gòu),。
隊(duì)列的基本運(yùn)算有六種:
·置空隊(duì):initqueue(q)
·判隊(duì)空:queueempty(q)
·判隊(duì)滿:queuefull(q)
·入隊(duì):enqueue(q,x)
·出隊(duì):dequeue(q)
·取隊(duì)頭元素:queuefront(q)
順序隊(duì)列的“假上溢”現(xiàn)象:由于頭尾指針不斷前移,,超出向量空間,。這時(shí)整個(gè)向量空間及隊(duì)列是空的卻產(chǎn)生了“上溢”現(xiàn)象。
為了克服“假上溢”現(xiàn)象引入循環(huán)向量的概念,,是把向量空間形成一個(gè)頭尾相接的環(huán)形,,這時(shí)隊(duì)列稱循環(huán)隊(duì)列。
判定循環(huán)隊(duì)列是空還是滿,,方法有三種:
·一種是另設(shè)一個(gè)布爾變量來判斷;
·第二種是少用一個(gè)元素空間,,入隊(duì)時(shí)先測(cè)試((rear+1)%m = front)? 滿:空;
·第三種就是用一個(gè)計(jì)數(shù)器記錄隊(duì)列中的元素的總數(shù)。
隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)稱為鏈隊(duì)列,,一個(gè)鏈隊(duì)列就是一個(gè)操作受限的單鏈表,。為了便于在表尾進(jìn)行插入(入隊(duì))的操作,在表尾增加一個(gè)尾指針,,一個(gè)鏈隊(duì)列就由一個(gè)頭指針和一個(gè)尾指針唯一地確定,。鏈隊(duì)列不存在隊(duì)滿和上溢的問題。在鏈隊(duì)列的出隊(duì)算法中,,要注意當(dāng)原隊(duì)中只有一個(gè)結(jié)點(diǎn)時(shí),,出隊(duì)后要同進(jìn)修改頭尾指針并使隊(duì)列變空。
數(shù)據(jù)結(jié)構(gòu)第二章知識(shí)點(diǎn)總結(jié)篇五
2010年自學(xué)考試《數(shù)據(jù)結(jié)構(gòu)》各章復(fù)習(xí)要點(diǎn)總結(jié)(3)龍耒為你整理:
第五章 多維數(shù)組和廣義表
數(shù)組一般用順序存儲(chǔ)的方式表示,。存儲(chǔ)的方式有:
·行優(yōu)先順序,,也就是把數(shù)組逐行依次排列。pascal,、c
·列優(yōu)先順序,,就是把數(shù)組逐列依次排列,。fortran
地址的計(jì)算方法:
·按行優(yōu)先順序排列的數(shù)組:loca(ij)=loca(11)+((i-1)*n+(j-1))*d.·按列優(yōu)先順序排列的數(shù)組:loca(ij)=loca(11)+((j-1)*n+(i-1))*d.矩陣的壓縮存儲(chǔ):為多個(gè)相同的非零元素分配一個(gè)存儲(chǔ)空間;對(duì)零元素不分配空間。
特殊矩陣的概念:所謂特殊矩陣是指非零元素或零元素分布有一定規(guī)律的矩陣,。
稀疏矩陣的概念:一個(gè)矩陣中若其非零元素的個(gè)數(shù)遠(yuǎn)遠(yuǎn)小于零元素的個(gè)數(shù),,則該矩陣稱為稀疏矩陣。
特殊矩陣的類型:
·對(duì)稱矩陣:滿足a(ij)=a(ji),。元素總數(shù)n(n+1)/2.i=max(i,,j),j=min(i,,j),loca(ij)=loc(sa[0])+(i*(i+1)/2+j)*d.·三角矩陣:
·上三角陣:k=i*(2n-i+1)/2+j-i,,loca(ij)=loc(sa[0])+k*d.·下三角陣:k=i*(i+1)/2+j,,loca(ij)=loc(sa[0])+k*d.·對(duì)角矩陣:k=2i+j,loca(ij)=loc(sa[0])+k*d.稀疏矩陣的壓縮存儲(chǔ)方式用三元組表把非零元素的值和它所在的行號(hào)列號(hào)做為一個(gè)結(jié)點(diǎn)存放在一起,,用這些結(jié)點(diǎn)組成的一個(gè)線性表來表示,。但這種壓縮存儲(chǔ)方式將失去隨機(jī)存儲(chǔ)功能。加入行表記錄每行的非零元素在三元組表中的起始位置,,即帶行表的三元組表,。
廣義表是n(n≥0)個(gè)元素的有限序列,其中的元素是原子或者是一個(gè)廣義表,。
廣義表表頭和表尾的概念:
·若廣義表ls非空(n≥1),,則這個(gè)廣義表的第一個(gè)元素就是表頭。
·其余的元素組成的表稱為ls的表尾,,所以表尾必是一個(gè)子表,。
廣義表有兩種表示法,一種是括號(hào)表示法,,一種是圖形表示法,。
廣義表與樹(形結(jié)構(gòu))相對(duì)應(yīng),這個(gè)廣義表就是純表,。
如果一個(gè)廣義表的結(jié)點(diǎn)又可以被其他結(jié)點(diǎn)所共享,,則這個(gè)表稱為再入表。
允許遞歸的表稱為遞歸表,。
線性表∈純表(樹)∈再入表∈遞歸表,。可見,,廣義表是對(duì)線性表和樹的推廣,。
廣義表有兩個(gè)特殊的基本運(yùn)算:
·取表頭head(ls):取表中的第一個(gè)數(shù)據(jù)元素,不能對(duì)空表操作,。
·取表尾tail(ls);取除表頭外,,其余數(shù)據(jù)元素構(gòu)成的子表,,不能對(duì)空表操作。
第六章 樹
樹是n個(gè)結(jié)點(diǎn)的有限集合,,非空時(shí)必須滿足:只有一個(gè)稱為根的結(jié)點(diǎn);其余結(jié)點(diǎn)形成m個(gè)不相交的子集,,并稱根的子樹。
根是開始結(jié)點(diǎn);結(jié)點(diǎn)的子樹數(shù)稱度;度為0的結(jié)點(diǎn)稱葉子(終端結(jié)點(diǎn));度不為0的結(jié)點(diǎn)稱分支結(jié)點(diǎn)(非終端結(jié)點(diǎn));除根外的分支結(jié)點(diǎn)稱內(nèi)部結(jié)點(diǎn);
有序樹是子樹有左,,右之分的樹;無序樹是子樹沒有左,,右之分的樹;森林是m個(gè)互不相交的樹的集合;
樹的四種不同表示方法:
·樹形表示法;
·嵌套集合表示法;
·凹入表示法;
·廣義表表示法。
二叉樹的定義:是n≥0個(gè)結(jié)點(diǎn)的有限集,,它是空集(n=0)或由一個(gè)根結(jié)點(diǎn)及兩棵互不相交的分別稱作這個(gè)根的左子樹和右子樹的二叉樹組成,。
二叉樹不是樹的特殊情形,與度數(shù)為2的有序樹不同,。
二叉樹的4個(gè)重要性質(zhì):
·二叉樹上第i層上的結(jié)點(diǎn)數(shù)目最多為2^(i-1)(i≥1);
·深度為k的二叉樹至多有(2^k)-1個(gè)結(jié)點(diǎn)(k≥1);
·在任意一棵二叉樹中,,若終端結(jié)點(diǎn)的個(gè)數(shù)為n0,度為2的結(jié)點(diǎn)數(shù)為n2,,則n0=n2+1;
·具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度為int(log2n)+1,。滿二叉樹是一棵深度為k,結(jié)點(diǎn)數(shù)為(2^k)-1的二叉樹;完全二叉樹是滿二叉樹在最下層自右向左去處部分結(jié)點(diǎn);
二叉樹的順序存儲(chǔ)結(jié)構(gòu)就是把二叉樹的所有結(jié)點(diǎn)按照層次順序存儲(chǔ)到連續(xù)的存儲(chǔ)單元中,。(存儲(chǔ)前先將其畫成完全二叉樹)
樹的存儲(chǔ)結(jié)構(gòu)多用的是鏈?zhǔn)酱鎯?chǔ),。bintnode的結(jié)構(gòu)為lchild|data|rchild,把所有bintnode類型的結(jié)點(diǎn),,加上一個(gè)指向根結(jié)點(diǎn)的bintree型頭指針就構(gòu)成了二叉樹的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),,稱為二叉鏈表。它就是由根指針root唯一確定的,。共有2n個(gè)指針域,,n+1個(gè)空指針。
根據(jù)訪問結(jié)點(diǎn)的次序不同可得三種遍歷:先序遍歷(前序遍歷或先根遍歷),,中序遍歷(或中根遍歷),、后序遍歷(或后根遍歷)。時(shí)間復(fù)雜度為o(n),。
利用二叉鏈表中的n+1個(gè)空指針域來存放指向某種遍歷次序下的前趨結(jié)點(diǎn)和后繼結(jié)點(diǎn)的指針,,這些附加的指針就稱為“線索”,加上線索的二叉鏈表就稱為線索鏈表,。線索使得查找中序前趨和中序后繼變得簡(jiǎn)單有效,,但對(duì)于查找指定結(jié)點(diǎn)的前序前趨和后序后繼并沒有什么作用。
樹和森林及二叉樹的轉(zhuǎn)換是唯一對(duì)應(yīng)的,。
轉(zhuǎn)換方法:
·樹變二叉樹:兄弟相連,,保留長(zhǎng)子的連線。
·二叉樹變樹:結(jié)點(diǎn)的右孩子與其雙親連,。
·森林變二叉樹:樹變二叉樹,,各個(gè)樹的根相連,。
樹的存儲(chǔ)結(jié)構(gòu):
·有雙親鏈表表示法:結(jié)點(diǎn)data | parent,對(duì)于求指定結(jié)點(diǎn)的雙親或祖先十分方便,,但不適于求指定結(jié)點(diǎn)的孩子及后代,。
·孩子鏈表表示法:為樹中每個(gè)結(jié)點(diǎn)data | next設(shè)置一個(gè)孩子鏈表firstchild,并將data | firstchild存放在一個(gè)向量中,。
·雙親孩子鏈表表示法:將雙親鏈表和孩子鏈表結(jié)合,。
·孩子兄弟鏈表表示法:結(jié)點(diǎn)結(jié)構(gòu)leftmostchild |data | rightsibing,附加兩個(gè)分別指向該結(jié)點(diǎn)的最左孩子和右鄰兄弟的指針域,。樹的前序遍歷與相對(duì)應(yīng)的二叉樹的前序遍歷一致;樹的后序遍歷與相對(duì)應(yīng)的二叉樹的中序遍歷一致,。
樹的帶權(quán)路徑長(zhǎng)度是樹中所有葉結(jié)點(diǎn)的帶權(quán)路徑長(zhǎng)度之和。樹的帶權(quán)路徑長(zhǎng)度最小的二叉樹就稱為最優(yōu)二叉樹(即哈夫曼樹),。
在葉子的權(quán)值相同的二叉樹中,,完全二叉樹的路徑長(zhǎng)度最短。
哈夫曼樹有n個(gè)葉結(jié)點(diǎn),,共有2n-1個(gè)結(jié)點(diǎn),沒有度為1的結(jié)點(diǎn),,這類樹又稱為嚴(yán)格二叉樹,。
變長(zhǎng)編碼技術(shù)可以使頻度高的字符編碼短,而頻度低的字符編碼長(zhǎng),,但是變長(zhǎng)編碼可能使解碼產(chǎn)生二義性,。如00、01,、0001這三個(gè)碼無法在解碼時(shí)確定是哪一個(gè),,所以要求在字符編碼時(shí)任一字符的編碼都不是其他字符編碼的前綴,這種碼稱為前綴碼(其實(shí)是非前綴碼),。
哈夫曼樹的應(yīng)用最廣泛地是在編碼技術(shù)上,,它能夠容易地求出給定字符集及其概率分布的最優(yōu)前綴碼。哈夫曼編碼的構(gòu)造很容易,,只要畫好了哈夫曼樹,,按分支情況在左路徑上寫代碼0,右路徑上寫代碼1,,然后從上到下到葉結(jié)點(diǎn)的相應(yīng)路徑上的代碼的序列就是該結(jié)點(diǎn)的最優(yōu)前綴碼,。