1.5線性鏈表
在定義的鏈表中,若只含有一個指針域來存放下一個元素地址,稱這樣的鏈表為單鏈表或線性鏈表。
在鏈?zhǔn)酱鎯Ψ绞街校竺總結(jié)點(diǎn)由兩部分組成:一部分用于存放數(shù)據(jù)元素值,稱為數(shù)據(jù)域;另一部分用于存放指針,稱為指針域。其中指針用于指向該結(jié)點(diǎn)的前一個或后一個結(jié)點(diǎn)(即前件或后件)。
1.6樹和二叉樹
1.樹的基本概念
樹是簡單的非線性結(jié)構(gòu),樹中有且僅有一個沒有前驅(qū)的節(jié)點(diǎn)稱為“根”,其余節(jié)點(diǎn)分成m個互不相交的有限集合T1,T2,…,T}mm,每個集合又是一棵樹,稱T1,T2,…,T}mm為根結(jié)點(diǎn)的子樹。
•父節(jié)點(diǎn):每一個節(jié)點(diǎn)只有一個前件,無前件的節(jié)點(diǎn)只有一個,稱為樹的根結(jié)點(diǎn)(簡稱樹的根)。
•子節(jié)點(diǎn):每~個節(jié)點(diǎn)可以后多個后件,無后件的節(jié)點(diǎn)稱為葉子節(jié)點(diǎn)。
•樹的度:所有節(jié)點(diǎn)最大的度。
•樹的深度:樹的最大層次。
2.二叉樹的定義及其基本性質(zhì)
(1)二叉樹的定義:二叉樹是一種非線性結(jié)構(gòu),是有限的節(jié)點(diǎn)集合,該集合為空(空二叉樹)或由一個根節(jié)點(diǎn)及兩棵互不相交的左右二叉子樹組成?煞譃闈M二叉樹和完全二叉樹,其中滿二叉樹一定是完全二叉樹,但完全二叉樹不一定是滿二叉樹。二叉樹具有如下兩個特點(diǎn):
•二叉樹可為空,空的二叉樹無節(jié)點(diǎn),非空二叉樹有且只有一個根結(jié)點(diǎn);
•每個節(jié)點(diǎn)最多可有兩棵子樹,稱為左子樹和右子樹。
(2)二叉樹的基本性質(zhì)。
性質(zhì)1:在二叉樹的第k層上至多有2k-1個結(jié)點(diǎn)(k≥1)。
性質(zhì)2:深度為m的二叉樹至多有2m-1個結(jié)點(diǎn)。
性質(zhì)3:對任何一棵二叉樹,度為0的結(jié)點(diǎn)(即葉子結(jié)點(diǎn))總是比度為2的結(jié)點(diǎn)多一個。
性質(zhì)4:具有n個結(jié)點(diǎn)的完全二叉樹的深度至少為[log2n]+1,其中[log2n]表示log2n的整數(shù)部分。
3.滿二叉樹與完全二叉樹
(1)滿二叉樹:滿二叉樹是指這樣的一種二叉樹:除最后一層外,每一層上的所有結(jié)點(diǎn)都有兩個子結(jié)點(diǎn)。滿二叉樹在其第i層上有2i-1個結(jié)點(diǎn)。
從上面滿二叉樹定義可知,二叉樹的每一層上的結(jié)點(diǎn)數(shù)必須都達(dá)到最大,否則就不是滿二叉樹。深度為m的滿二叉樹有2m-1個結(jié)點(diǎn)。
(2)完全二叉樹:完全二叉樹是指這樣的二叉樹:除最后一層外,每一層上的結(jié)點(diǎn)數(shù)均達(dá)到最大值;在最后一層上只缺少右邊的若干結(jié)點(diǎn)。
如果—棵具有n個結(jié)點(diǎn)的深度為k的二叉樹,它的每—個結(jié)點(diǎn)都與深度為k的滿二叉樹中編號為1~n的結(jié)點(diǎn)——對應(yīng)。
3.二叉樹的存儲結(jié)構(gòu)
二叉樹通常采用鏈?zhǔn)酱鎯Y(jié)構(gòu),存儲節(jié)點(diǎn)由數(shù)據(jù)域和指針域(左指針域和右指針域)組成。二叉樹的鏈?zhǔn)酱鎯Y(jié)構(gòu)也稱二叉鏈表,對滿二叉樹和完全二叉樹可按層次進(jìn)行順序存儲。
4.二叉樹的遍歷
二叉樹的遍歷是指不重復(fù)地訪問二叉樹中所有節(jié)點(diǎn),主要指非空二叉樹,對于空二叉樹則結(jié)束返回。二叉樹的遍歷包括前序遍歷、中序遍歷和后序遍歷。
(1)前序遍歷。
前序遍歷是指在訪問根結(jié)點(diǎn)、遍歷左子樹與遍歷右子樹這三者中,首先訪問根結(jié)點(diǎn),然后遍歷左子樹,最后遍歷右子樹;并且,在遍歷左右子樹時,仍然先訪問根結(jié)點(diǎn),然后遍歷左子樹,最后遍歷右子樹。前序遍歷描述為:若二叉樹為空,則執(zhí)行空操作;否則①訪問根結(jié)點(diǎn);②前序遍歷左子樹;③前序遍歷右子樹。
(2)中序遍歷。
中序遍歷是指在訪問根結(jié)點(diǎn)、遍歷左子樹與遍歷右子樹這三者中,首先遍歷左子樹,然后訪問根結(jié)點(diǎn),最后遍歷右子樹;并且,在遍歷左、右子樹時,仍然先遍歷左子樹,然后訪問根結(jié)點(diǎn),最后遍歷右子樹。中序遍歷描述為:若二叉樹為空,則執(zhí)行空操作;否則①中序遍歷左子樹;②訪問根結(jié)點(diǎn);③中序遍歷右子樹。
(3)后序遍歷。
后序遍歷是指在訪問根結(jié)點(diǎn)、遍歷左子樹與遍歷右子樹這三者中,首先遍歷左子樹,然后遍歷右子樹,最后訪問根結(jié)點(diǎn),并且,在遍歷左、右子樹時,仍然先遍歷左子樹,然后遍歷右子樹,最后訪問根結(jié)點(diǎn)。后序遍歷描述為:若二叉樹為空,則執(zhí)行空操作;否則①后序遍歷左子樹;②后序遍歷右子樹;③訪問根結(jié)點(diǎn)。
1.7查找技術(shù)
(1)順序查找:在線性表中查找指定的元素。
(2)最壞情況下,最后一個元素才是要找的元素,則需要與線性表中所有元素比較,比較次數(shù)為n。
(2)二分查找:二分查找也稱折半查找,它是一種高效率的查找方法。但二分查找有條件限制,它要求表必須用順序存儲結(jié)構(gòu),且表中元素必須按關(guān)鍵字有序(升序或降序均可)排列。對長度為n的有序線性表,在最壞情況下,二分查找法只需比較log2n次。
1.8排序技術(shù)
(1)交換類排序法。
•冒泡排序:通過對待排序序列從后向前或從前向后,依次比較相鄰元素的排序碼,若發(fā)現(xiàn)逆序則交換,使較大的元素逐漸從前部移向后部或較小的元素逐漸從后部移向前部,直到所有元素有序為止。在最壞情況下,對長度為n的線性表排序,冒泡排序需要比較的次數(shù)為n(n-1)/2。
•快速排序:是迄今為止所有內(nèi)排序算法中速度最快的一種。它的基本思想是:任取待排序序列中的某個元素作為基準(zhǔn)(一般取第一個元素),通過一趟排序,將待排元素分為左右兩個子序列,左子序列元索的排序碼均小于或等于基準(zhǔn)元素的排序碼,右子序列的排序碼則大于基準(zhǔn)元素的排序碼,然后分別對兩個子序列繼續(xù)進(jìn)行排序,直至整個序列有序。最壞情況下,即每次劃分,只得到一個序列,時間效率為O(n2)。
(2)插人類排序法。
•簡單插入排序法:把n個待排序的元素看成為一個有序表和一個無序表,開始時有序表中只包含一個元素,無序表中包含有n-1個元素,排序過程中每次從無序表中取出第一個元素,把它的排序碼依次與有序表元素的排序碼進(jìn)行比較,將它插入到有序表中的適當(dāng)位置,使之成為新的有序表。在最壞情況下,即初始排序序列是逆序的情況下,比較次數(shù)為n(n-1)/2,移動次數(shù)為n(n-1)/2。
•希爾排序法:先將整個待排元素序列分割成若干個子序列(由相隔某個“增量”的元素組成的)分別進(jìn)行直接插入排序。待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進(jìn)行一次直接插入排序。
(3)選擇類排序法。
•簡單選擇排序法:掃描整個線性表。從中選出最小的元素。將它交換到表的最前面;然后對剩下的子表采用同樣的方法,直到子表空為止。最壞情況下需要比較n(n-1)/2次。
•堆排序的方法:首先將一個無序序列建成堆;然后將堆頂元素(序列中的最大項)與堆中最后一個元素交換(最大項應(yīng)該在序列的最后)。不考慮已經(jīng)換到最后的那個元素,只考慮前n-1個元素構(gòu)成的子序列,將該子序列調(diào)整為堆。反復(fù)做步驟②,直到剩下的子序列空為止。在最壞情況下,堆排序法需要比較的次數(shù)為0(nlog2n)
相關(guān)推薦:
2015年計算機(jī)二級《MSOffice》基礎(chǔ)過關(guān)習(xí)題匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |