二級(jí)C公共基礎(chǔ)知識(shí)_第1頁
二級(jí)C公共基礎(chǔ)知識(shí)_第2頁
二級(jí)C公共基礎(chǔ)知識(shí)_第3頁
二級(jí)C公共基礎(chǔ)知識(shí)_第4頁
二級(jí)C公共基礎(chǔ)知識(shí)_第5頁
已閱讀5頁,還剩244頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)公共基礎(chǔ)基本要求1. 掌握算法的基本概念。2. 掌握基本數(shù)據(jù)結(jié)構(gòu)及其操作。3. 掌握基本查找和排序算法。4. 掌握逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)方法。5. 掌握軟件工程的基本概念。6. 掌握數(shù)據(jù)庫的基本知識(shí),了解關(guān)系數(shù)據(jù)庫的設(shè)計(jì)??荚噧?nèi)容:第一章1. 算法的基本概念;算法復(fù)雜度的概念和意義(時(shí)間復(fù)雜度與空間復(fù)雜度)。2. 數(shù)據(jù)結(jié)構(gòu)的定義;數(shù)據(jù)的邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu);數(shù)據(jù)結(jié)構(gòu)的圖形表示;線性結(jié)構(gòu)與非線性結(jié)構(gòu)的概念。3. 線性表的定義;線性表的順序存儲(chǔ)結(jié)構(gòu)及其插入與刪除運(yùn)算。4. 棧和隊(duì)列的定義;棧和隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)及其基本運(yùn)算。5. 線性單鏈表、雙向鏈表與循環(huán)鏈表的結(jié)構(gòu)及其基本運(yùn)

2、算。6. 樹的基本概念;二叉樹的定義及其存儲(chǔ)結(jié)構(gòu);二叉樹的前序、中序和后序遍歷。7. 順序查找與二分法查找算法;基本排序算法(交換類排序,選擇類排序,插入類排序)。 考試內(nèi)容:第二章1. 程序設(shè)計(jì)方法與風(fēng)格。2. 結(jié)構(gòu)化程序設(shè)計(jì)。3. 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,對(duì)象,方法,屬性及繼承與多態(tài)性??荚噧?nèi)容:第三章1. 軟件工程基本概念,軟件生命周期概念,軟件工具與軟件開發(fā)環(huán)境。2. 結(jié)構(gòu)化分析方法,數(shù)據(jù)流圖,數(shù)據(jù)字典,軟件需求規(guī)格說明書。3. 結(jié)構(gòu)化設(shè)計(jì)方法,總體設(shè)計(jì)與詳細(xì)設(shè)計(jì)。4. 軟件測(cè)試的方法,白盒測(cè)試與黑盒測(cè)試,測(cè)試用例設(shè)計(jì),軟件測(cè)試的實(shí)施,單元測(cè)試、集成測(cè)試和系統(tǒng)測(cè)試。5. 程序的調(diào)試,靜

3、態(tài)調(diào)試與動(dòng)態(tài)調(diào)試??荚噧?nèi)容:第四章1. 數(shù)據(jù)庫的基本概念:數(shù)據(jù)庫,數(shù)據(jù)庫管理系統(tǒng),數(shù)據(jù)庫系統(tǒng)。2. 數(shù)據(jù)模型,實(shí)體聯(lián)系模型及E-R圖,從E-R圖導(dǎo)出關(guān)系數(shù)據(jù)模型。3. 關(guān)系代數(shù)運(yùn)算,包括集合運(yùn)算及選擇、投影、連接運(yùn)算,數(shù)據(jù)庫規(guī)范化理論。4. 數(shù)據(jù)庫設(shè)計(jì)方法和步驟:需求分析、概念設(shè)計(jì)、邏輯設(shè)計(jì)和物理設(shè)計(jì)的相關(guān)策略。第一章 數(shù)據(jù)結(jié)構(gòu)與算法1.1 算法算法的基本概念 算法:解題方案的準(zhǔn)確而完整的描述。 算法的基本特征:是一組嚴(yán)謹(jǐn)?shù)囟x運(yùn)算順序的規(guī)則,每一個(gè)規(guī)則都是有效的,是明確的,此順序?qū)⒃谟邢薜拇螖?shù)下終止。算法不等于程序,程序不可能優(yōu)于算法。 基本特性 可行性:根據(jù)實(shí)際問題設(shè)計(jì)的算法,執(zhí)行得到滿意

4、結(jié)果 確定性:每一步驟必須有明確定義,不允許有多義性。 有窮性:算法必須能在有限的時(shí)間內(nèi)做完。 輸入和輸出(擁有足夠的情報(bào)):方可執(zhí)行。算法的基本要素一是對(duì)數(shù)據(jù)對(duì)象的運(yùn)算和操作;二是算法的控制結(jié)構(gòu)。(1)算法中對(duì)數(shù)據(jù)的運(yùn)算和操作計(jì)算機(jī)指令系統(tǒng):一個(gè)計(jì)算機(jī)系統(tǒng)能執(zhí)行的所有指令的集合?;具\(yùn)算和操作包括:算術(shù)運(yùn)算、邏輯運(yùn)算、關(guān)系運(yùn)算、數(shù)據(jù)傳輸(主要指賦值、輸入、輸出等操作)。(2)算法的控制結(jié)構(gòu):算法的控制結(jié)構(gòu)給出了算法的基本框架。一個(gè)算法的功能不僅取決于所選用的操作,而且還與各操作之間的執(zhí)行順序有關(guān)。算法中各操作之間的執(zhí)行順序稱為算法的控制結(jié)構(gòu)。一個(gè)算法一般都可以用順序、選擇、循環(huán)三種基本控制結(jié)

5、構(gòu)組合而成。算法的基本要素算法設(shè)計(jì)基本方法(1)列舉法:根據(jù)提出的問題,列舉所有可能的情況,并用問題中給定的條件檢驗(yàn)?zāi)男┦切枰?,哪些是不需要的。?)歸納法:通過列舉少量的特殊情況,經(jīng)過分析,最后找出一般的關(guān)系。(3)遞推:是指從已知的初始條件出發(fā),逐次推出所要求的各中間結(jié)果和最后結(jié)果。算法設(shè)計(jì)基本方法(續(xù))(4)遞歸:將問題逐層分解,最后歸結(jié)為一些最簡(jiǎn)單的問題。實(shí)際上并沒有對(duì)問題進(jìn)行求解,而只是當(dāng)解決到最后那些最簡(jiǎn)單的問題后,再沿著原來分解的逆過程逐步進(jìn)行綜合。(5)減半遞推技術(shù):所謂“減半”,是指將問題的規(guī)模減半,而問題的性質(zhì)不變;所謂“遞推”,是指重復(fù)“減半”的過程。例如工程上的分治法

6、,對(duì)問題分而治之。(6)回溯法:通過對(duì)問題的分析,找出一個(gè)解決問題的線索,然后沿著這個(gè)線索逐步試探,對(duì)于每一步的試探,若試探成功,就得到問題的解,若試探失敗,就逐步回退,換別的路線再進(jìn)行試探。算法復(fù)雜度:算法時(shí)間復(fù)雜和算法空間復(fù)雜度。1.算法的時(shí)間復(fù)雜度算法時(shí)間復(fù)雜度是指執(zhí)行算法所需要的計(jì)算工作量。算法的工作量用算法所執(zhí)行的基本運(yùn)算次數(shù)來度量,而算法所執(zhí)行的基本運(yùn)算次數(shù)是問題規(guī)模的函數(shù),即 算法的工作量=f(n)1.1.2 算法的復(fù)雜度O(1) 常量級(jí) O(n) 線性級(jí) O(n2) 平方級(jí)舉例1 X=X+1; S=0;此算法的基本操作是賦值語句。執(zhí)行兩條語句各一次,共2次,與規(guī)模無關(guān)。時(shí)間復(fù)雜

7、度為(1),即常量階。執(zhí)行次數(shù): 2時(shí)間復(fù)雜度: O(1)時(shí)間復(fù)雜度舉例舉例2 For i=1 to n x=x+1 s=s+xNext i 執(zhí)行次數(shù)為:2n其時(shí)間復(fù)雜度為:O(n)即時(shí)間復(fù)雜度為線性階。時(shí)間復(fù)雜度舉例舉例3For i=1 to n For j =1 to n x=x+1 s=s+x j+; i+; 基本語句執(zhí)行次數(shù)2n2其時(shí)間復(fù)雜度為:O(n2)即時(shí)間復(fù)雜度為平方階。時(shí)間復(fù)雜度舉例2.算法空間復(fù)雜度算法空間復(fù)雜度是指執(zhí)行這個(gè)算法所需要的內(nèi)存空間。一個(gè)算法所占用的存儲(chǔ)空間包括算法程序所占的空間、輸入的初始數(shù)據(jù)所占的存儲(chǔ)空間以及算法執(zhí)行過程中所需要的額外空間。算法的空間復(fù)雜度和時(shí)

8、間復(fù)雜度沒有直接的聯(lián)系。算法的復(fù)雜度 算法的時(shí)間復(fù)雜度是指A) 執(zhí)行算法程序所需要的時(shí)間 B) 算法程序的長(zhǎng)度C) 算法執(zhí)行過程中所需要的基本運(yùn)算次數(shù) D) 算法程序中的指令條數(shù)算法的基本特征是可行性、確定性、 【1】 和擁有足夠的情報(bào)。算法的空間復(fù)雜度是指 A) 算法程序的長(zhǎng)度 B) 算法程序中的指令條數(shù) C) 算法程序所占的存儲(chǔ)空間 D) 執(zhí)行過程中所需要的存儲(chǔ)空間在計(jì)算機(jī)中,算法是指 A) 加工方法B) 解題方案的準(zhǔn)確而完整的描述 C) 排序方法D) 查詢方法例題講解有窮性算法分析的目的是 A) 找出數(shù)據(jù)結(jié)構(gòu)的合理性 B) 找出算法中輸入和輸出之間的關(guān)系 C) 分析算法的易懂性和可靠性

9、D) 分析算法的效率以求改進(jìn)算法的工作量大小和實(shí)現(xiàn)算法所需的存儲(chǔ)單元多少分別稱為算法的 【1】 。時(shí)間復(fù)雜度和空間復(fù)雜度2.2 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的定義數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的圖形表示線性結(jié)構(gòu)與非線性結(jié)構(gòu)2.2.1 數(shù)據(jù)結(jié)構(gòu)研究的主要內(nèi)容當(dāng)今計(jì)算機(jī)應(yīng)用的特點(diǎn):所處理的數(shù)據(jù)量大且具有一定的關(guān)系;對(duì)其操作不再是單純的數(shù)值計(jì)算,而更多地是需要對(duì)其進(jìn)行組織、管理和檢索。應(yīng)用舉例1學(xué)籍檔案管理假設(shè)一個(gè)學(xué)籍檔案管理系統(tǒng)應(yīng)包含如下表1-1所示的學(xué)生信息。特點(diǎn): l每個(gè)學(xué)生的信息占據(jù)一行,所有學(xué)生的信息按學(xué)號(hào)順序依次排列構(gòu)成一張表格; l表中每個(gè)學(xué)生的信息依據(jù)學(xué)號(hào)的大小存在著一種前后關(guān)系,這就是我們所

10、說的線性結(jié)構(gòu); l對(duì)它的操作通常是插入某個(gè)學(xué)生的信息,刪除某個(gè)學(xué)生的信息,更新某個(gè)學(xué)生的信息,按條件檢索某個(gè)學(xué)生的信息等等。 應(yīng)用舉例2輸出n個(gè)對(duì)象的全排列 輸出n個(gè)對(duì)象的全排列可以使用下圖1-1所示的形式描述。圖 1-1 3個(gè)對(duì)象的全排列過程特點(diǎn): l在求解過程中,所處理的數(shù)據(jù)之間具有層次關(guān)系,這是我們所說的樹形結(jié)構(gòu); l對(duì)它的操作有:建立樹形結(jié)構(gòu),輸出最低層結(jié)點(diǎn)內(nèi)容等等。 應(yīng)用舉例3制定教學(xué)計(jì)劃 在制定教學(xué)計(jì)劃時(shí),需要考慮各門課程的開設(shè)順序。有些課程需要先導(dǎo)課程,有些課程則不需要,而有些課程又是其他課程的先導(dǎo)課程。比如,計(jì)算機(jī)專業(yè)課程的開設(shè)情況如下表1-2所示:課程先后關(guān)系的圖形描形式:c

11、1c9c4c2c12c10c11c5c3c6c7c8圖 1-2 計(jì)算機(jī)專業(yè)必修課程開設(shè)先后關(guān)系特點(diǎn) l課程之間的先后關(guān)系用圖結(jié)構(gòu)描述; l通過實(shí)施創(chuàng)建圖結(jié)構(gòu),按要求將圖結(jié)構(gòu)中的頂點(diǎn)進(jìn)行線性排序。結(jié)論:數(shù)據(jù)結(jié)構(gòu)主要研究以下三個(gè)方面的問題: (1)數(shù)據(jù)集合中各數(shù)據(jù)元素之間所固有的邏輯關(guān)系,即數(shù)據(jù)的邏輯結(jié)構(gòu);(2)在對(duì)數(shù)據(jù)進(jìn)行處理時(shí),各數(shù)據(jù)元素在計(jì)算機(jī)中的存儲(chǔ)關(guān)系,即數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu);(3)對(duì)各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行的運(yùn)算。 數(shù)據(jù)結(jié)構(gòu)是一門研究數(shù)據(jù)組織、存儲(chǔ)和運(yùn)算的一般方法的學(xué)科。2.2.2 基本概念和術(shù)語能輸入到計(jì)算機(jī)中并能被計(jì)算機(jī)程序處理的符號(hào)的集合。整數(shù)(1,2)、實(shí)數(shù)(1.1,1.2)字符串(Beij

12、ing)、圖形、聲音。2.2.2 基本概念和術(shù)語 數(shù)據(jù)結(jié)構(gòu)是一門研究數(shù)據(jù)組織、存儲(chǔ)和運(yùn)算的一般方法的學(xué)科。2.2.2 基本概念和術(shù)語計(jì)算機(jī)管理圖書問題 在圖書館里有各種卡片:有按書名編排的、有按作者編排的、有按分類編排如何將查詢圖書的這些信息存入計(jì)算機(jī)中既要考慮查詢時(shí)間短,又要考慮節(jié)省空間 數(shù)據(jù)結(jié)構(gòu)是一門研究數(shù)據(jù)組織、存儲(chǔ)和運(yùn)算的一般方法的學(xué)科。最簡(jiǎn)單的辦法之一是建立一張表,每一本書的信息在表中占一行,如 2.2.2 基本概念和術(shù)語 數(shù)據(jù)結(jié)構(gòu)是一門研究數(shù)據(jù)組織、存儲(chǔ)和運(yùn)算的一般方法的學(xué)科。如何將0,1,2,3,4,5,6,7,8,9這10個(gè)數(shù)存放在計(jì)算機(jī)中能最快地達(dá)到你所需要的目的? 目的不同

13、,最佳的存儲(chǔ)方方法就不同。 從大到小排列:9,8,7,6,5,4,3,2,1,0輸出偶數(shù):0,2,4,6,8,1,3,5,7,9 數(shù)據(jù)元素在計(jì)算機(jī)中的表示 數(shù)據(jù)結(jié)構(gòu)是一門研究數(shù)據(jù)組織、存儲(chǔ)和運(yùn)算的一般方法的學(xué)科。2.2.2 基本概念和術(shù)語對(duì)數(shù)據(jù)結(jié)構(gòu)中的節(jié)點(diǎn)進(jìn)行操作處理(插入、刪除、修改、查找、排序)2.2.2 基本概念和術(shù)語 數(shù)據(jù)結(jié)構(gòu)是一門研究數(shù)據(jù)組織、存儲(chǔ)和運(yùn)算的一般方法的學(xué)科。數(shù)據(jù)元素(Data Element) 數(shù)據(jù)元素是數(shù)據(jù)的基本單位,即數(shù)據(jù)集合中的個(gè)體。 有時(shí)一個(gè)數(shù)據(jù)元素可由若干數(shù)據(jù)項(xiàng)(Data Item)組成。數(shù)據(jù)項(xiàng)是數(shù)據(jù)的最小單位。數(shù)據(jù)結(jié)構(gòu)可描述為 Group=(D,R)有限個(gè)數(shù)

14、據(jù)元素的集合有限個(gè)節(jié)點(diǎn)間關(guān)系的集合 數(shù)據(jù)結(jié)構(gòu)主要研究以下三個(gè)方面的問題: 數(shù)據(jù)的邏輯結(jié)構(gòu):數(shù)據(jù)集合中各元素的信息,及元素之間所固有的邏輯關(guān)系(前后件關(guān)系) 數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu):各數(shù)據(jù)元素在計(jì)算機(jī)中的存儲(chǔ)關(guān)系 對(duì)各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行的運(yùn)算 主要目的是為了提高數(shù)據(jù)的效率。所謂提高數(shù)據(jù)處理的效率,主要包括兩個(gè)方面:一是提高數(shù)據(jù)處理的速度,二是盡量節(jié)省在數(shù)據(jù)處理過程中所占用的計(jì)算機(jī)存儲(chǔ)空間。用圖形表示數(shù)據(jù)結(jié)構(gòu)B=(D,R),其中D=di|1=in時(shí),由于循環(huán)變量的終值大于初值,結(jié)點(diǎn)后移語句將不進(jìn)行;這是最好情況,其時(shí)間復(fù)雜度O(1); 當(dāng)i=1時(shí),結(jié)點(diǎn)后移語句將循環(huán)執(zhí)行n次,需移動(dòng)表中所有結(jié)點(diǎn),這是最壞情況,

15、其時(shí)間復(fù)雜度為O(n)。由于插入可能在表中任何位置上進(jìn)行,因此需分析算法的平均復(fù)雜度在長(zhǎng)度為n的線性表中第i個(gè)位置上插入一個(gè)結(jié)點(diǎn),令Eis(n)表示移動(dòng)結(jié)點(diǎn)的期望值(即移動(dòng)的平均次數(shù)),則在第i個(gè)位置上插入一個(gè)結(jié)點(diǎn)的移動(dòng)次數(shù)為n-i+1。 pi 是在第i 個(gè)元素之前插入一個(gè)元素的概率, 故 Eis(n)= pi(n-i+1)不失一般性,假設(shè)在表中任何位置(1in+1)上插入結(jié)點(diǎn)的機(jī)會(huì)是均等的,則 p1=p2=p3=p(n+1)=1/(n+1)因此,在等概率插入的情況下, Eis(n)= ( n -i+1)/(n+1)線性表中含有n個(gè)數(shù)據(jù)元素,在進(jìn)行插入操作時(shí),若假定在n+1個(gè)位置上插入元素的可

16、能性均等,則平均移動(dòng)元素的個(gè)數(shù)為:也就是說,在順序表上做插入運(yùn)算,平均要移動(dòng)表上一半結(jié)點(diǎn)。當(dāng)表長(zhǎng) n較大時(shí),算法的效率相當(dāng)?shù)?。雖然Eis(n)中n的的系數(shù)較小,但就數(shù)量級(jí)而言,它仍然是線性階的。因此算法的平均時(shí)間復(fù)雜度為O(n)。1.3.4 順序表的刪除運(yùn)算刪除運(yùn)算是指將表的第i(1in) 結(jié)點(diǎn)刪去,使得長(zhǎng)度為n的線性表變成n-1的線性表。(a1,a2,ai-1,ai, , an-1)a0a1ai-1aiai+1an-1刪除lastmaxsize刪除前a0a1ai-1ai+2an-1lastmaxsize刪除后ai+1算法思想:刪除第i個(gè)元素時(shí),需要將n至i+1個(gè)(共n-I)個(gè)元素向前移動(dòng)一個(gè)

17、位置。步驟:1、檢查刪除要求的有關(guān)參數(shù)的合理性2、把原來的第I+1個(gè)數(shù)據(jù)元素至第n個(gè)(共n-I)個(gè)元素依次向前移動(dòng)一個(gè)位置3、修正線性表的數(shù)據(jù)元素個(gè)數(shù)。刪除算法的時(shí)間分析與插入算法相似,結(jié)點(diǎn)的移動(dòng)次數(shù)也是由表長(zhǎng)n和位置i決定。若i=n,則由于循環(huán)變量的初值大于終值,前移語句將不執(zhí)行,無需移動(dòng)結(jié)點(diǎn);時(shí)間復(fù)雜度為O(1)。若i=1,則前移語句將循環(huán)執(zhí)行n-1次,需移動(dòng)表中除開始結(jié)點(diǎn)外的所有結(jié)點(diǎn)。時(shí)間復(fù)雜度為O(n)。順序表刪除運(yùn)算的復(fù)雜度刪除算法的平均性能分析與插入算法相似。在長(zhǎng)度為n的線性表中刪除一個(gè)結(jié)點(diǎn),令Ede(n)表示所需移動(dòng)結(jié)點(diǎn)的平均次數(shù),刪除表中第i個(gè)結(jié)點(diǎn)的移動(dòng)次數(shù)為n-i,故 Ede

18、(n)= pi(n-i)式中,pi表示刪除表中第i個(gè)結(jié)點(diǎn)的概率。在等概率的假設(shè)下, p1=p2=p3=pn=1/n在進(jìn)行刪除操作時(shí),若假定刪除每個(gè)元素的可能性均等,則平均移動(dòng)元素的個(gè)數(shù)為:算法復(fù)雜性分析1、插入 n/2 T(n)=O(n)2、刪除 (n-1)/2 T(n)=O(n)順序表的基礎(chǔ)要點(diǎn)1、線性表是具有n個(gè)數(shù)據(jù)元素的有限序列。2、線性表的順序存儲(chǔ)結(jié)構(gòu)具有三個(gè)弱點(diǎn):(如何解決?)在插入和刪除時(shí),需移動(dòng)大量元素由于難以估計(jì),必須預(yù)先分配較大的空間表的容量難以擴(kuò)充3、順序存儲(chǔ)結(jié)構(gòu)通過元素的相對(duì)存儲(chǔ)地址來表示元素之間的關(guān)系4、線性表順序存儲(chǔ)的優(yōu)點(diǎn)是可隨機(jī)存取元素。順序表的基礎(chǔ)要點(diǎn)(續(xù))5、順

19、序表中邏輯上相鄰的元素的物理位置必定緊鄰。 6、順序表是一種隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)。7、在順序存儲(chǔ)的線性表中,插入或刪除一個(gè)元素時(shí),需要平均移動(dòng)表的一半元素,具有移動(dòng)的元素個(gè)數(shù)與該元素的位置有關(guān)。8、在長(zhǎng)度為n的順序表中插入一個(gè)元素的時(shí)間復(fù)雜度為O(n),刪除一個(gè)元素的時(shí)間復(fù)雜度為O(n)。線性表L=(a1,a2,a3,ai,an),下列說法正確的是 A) 每個(gè)元素都有一個(gè)直接前件和直接后件 B) 線性表中至少要有一個(gè)元素 C) 表中諸元素的排列順序必須是由小到大或由大到小 D) 除第一個(gè)元素和最后一個(gè)元素外,其余每個(gè)元素都有一個(gè) 且只有一個(gè)直接前件和直接后件線性表的順序存儲(chǔ)結(jié)構(gòu)和線性表的鏈?zhǔn)酱鎯?chǔ)

20、結(jié)構(gòu)分別是 A) 順序存取的存儲(chǔ)結(jié)構(gòu)、順序存取的存儲(chǔ)結(jié)構(gòu) B) 隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)、順序存取的存儲(chǔ)結(jié)構(gòu) C) 隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)、隨機(jī)存取的存儲(chǔ)結(jié)構(gòu) D) 任意存取的存儲(chǔ)結(jié)構(gòu)、任意存取的存儲(chǔ)結(jié)構(gòu) 下列敘述中,錯(cuò)誤的是 A) 數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)與數(shù)據(jù)處理的效率密切相關(guān) B) 數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)與數(shù)據(jù)處理的效率無關(guān) C) 數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)在計(jì)算機(jī)中所占的空間不一定是連續(xù)的 D) 一種數(shù)據(jù)的邏輯結(jié)構(gòu)可以有多種存儲(chǔ)結(jié)構(gòu) 根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間前后件關(guān)系的復(fù)雜程度,一般將數(shù)據(jù)結(jié)構(gòu)分成 A) 動(dòng)態(tài)結(jié)構(gòu)和靜態(tài)結(jié)構(gòu) B) 緊湊結(jié)構(gòu)和非緊湊結(jié)構(gòu) C) 線性結(jié)構(gòu)和非線性結(jié)構(gòu) D) 內(nèi)部結(jié)構(gòu)和外部結(jié)構(gòu)當(dāng)線性表采用順序存

21、儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)存儲(chǔ)時(shí),其主要特點(diǎn)是 【1】 。隨機(jī)存取棧棧是一種特殊的線性表。其特殊性在于限定插入和刪除數(shù)據(jù)元素的操作只能在線性表的表尾端進(jìn)行。如下所示:進(jìn)行插入和刪除的表尾端是浮動(dòng)端,通常被稱為棧頂, an 為棧頂元素, 并用一個(gè)“棧頂指針”指示;而表頭端是固定端,通常被稱為棧底, a1 為棧底元素,。我們經(jīng)常將棧用下圖的形式描述:a1, a2, a3, ., an 插入和刪除端結(jié)論:后進(jìn)先出(Last In First Out),簡(jiǎn)稱為L(zhǎng)IFO線性表。 舉例1:家里吃飯的碗,通常在洗干凈后一個(gè)一個(gè)地落在一起存放,在使用時(shí),若一個(gè)一個(gè)地拿,一定最先拿走最上面的那只碗,而最后拿出最下面的那只碗。

22、舉例2:在建筑工地上,使用的磚塊從底往上一層一層地碼放,在使用時(shí),將從最上面一層一層地拿取。棧的基本運(yùn)算:(1)插入元素稱為入棧運(yùn)算;(2)刪除元素稱為退棧運(yùn)算;(3)讀棧頂元素是將棧頂元素賦給一個(gè)指定的變量,此時(shí)指針無變化 棧頂指針和棧中元素之間的關(guān)系basetopbase A A B C D Etopbase=top 空棧top 指向棧頂元素的下一個(gè)位置當(dāng)base= 時(shí),表明棧結(jié)構(gòu)不存在。base top1.4.2 隊(duì)列及其基本運(yùn)算隊(duì)列(Queue)也是一種運(yùn)算受限的線性表。它只允許在表的一端進(jìn)行插入,而在另一端進(jìn)行刪除。允許刪除的一端稱為隊(duì)頭(front),允許插入的一端稱為隊(duì)尾(rea

23、r)。例如:排隊(duì)購物。先進(jìn)入隊(duì)列的成員總是先離開隊(duì)列。因此隊(duì)列亦稱作先進(jìn)先出(First In First Out)的線性表,簡(jiǎn)稱FIFO表。當(dāng)隊(duì)列中沒有元素時(shí)稱為空隊(duì)列。在空隊(duì)列中依次加入元素a1,a2,an之后,a1是隊(duì)頭元素,an是隊(duì)尾元素。顯然退出隊(duì)列的次序也只能是a1,a2,an ,也就是說隊(duì)列的修改是依先進(jìn)先出的原則進(jìn)行的。下圖是隊(duì)列的示意圖: a1a2an 插入端和刪除端都是浮動(dòng)的。通常我們將插入端稱為隊(duì)尾,用一個(gè)“隊(duì)尾指針”指示;而刪除端被稱為隊(duì)頭,用一個(gè)“隊(duì)頭指針”指示。 結(jié)論:先進(jìn)先出(First In First Out),簡(jiǎn)稱為FIFO線性表。 出隊(duì)入隊(duì)隊(duì)列的順序存儲(chǔ)結(jié)

24、構(gòu)實(shí)現(xiàn):用一維數(shù)組實(shí)現(xiàn)sqMfront=-1rear=-1123450隊(duì)空123450frontJ1,J1,J3入隊(duì)J1J2J3rearrear123450J4,J5,J6入隊(duì)J4J5J6front設(shè)兩個(gè)指針front,rear,約定:rear指示隊(duì)尾元素;front指示隊(duì)頭元素前一位置初值front=rear=-1空隊(duì)列條件:front=rear入隊(duì)列:sq+rear=x;出隊(duì)列:x=sq+front;rearrearfrontrear123450J1,J2,J3出隊(duì)J1J2J3frontfrontfront存在問題設(shè)數(shù)組維數(shù)為M,則:當(dāng)front=-1,rear=M-1時(shí),再有元素入隊(duì)發(fā)生

25、溢出真溢出當(dāng)front-1,rear=M-1時(shí),再有元素入隊(duì)發(fā)生溢出假溢出解決方案隊(duì)首固定,每次出隊(duì)剩余元素向下移動(dòng)浪費(fèi)時(shí)間循環(huán)隊(duì)列基本思想:把隊(duì)列設(shè)想成環(huán)形,讓sq0接在sqM-1之后,若rear+1=M,則令rear=0;1M2frontrear.入隊(duì)運(yùn)算是指在循環(huán)隊(duì)列的隊(duì)尾加入一個(gè)新元素(1)首先將隊(duì)尾指針進(jìn)一,即rear=rear+1,并當(dāng)rear=m+1時(shí)置rear=1。(2)然后將新元素插入到隊(duì)尾指針指向的位置。出隊(duì)運(yùn)算是指在循環(huán)隊(duì)列的排頭位置退出一個(gè)元素并賦給指定變量。(1)首先將排頭指針進(jìn)一,即front=front+1,并且當(dāng)front=m+1時(shí)置front=1(2)然后將排

26、頭指針指向的元素賦值給指定變量012345rearfrontJ4J5J6012345rearfrontJ9J8J7J4J5J6012345rearfront初始狀態(tài)J4,J5,J6出隊(duì)J7,J8,J9入隊(duì)隊(duì)空:front=rear隊(duì)滿:front=rear解決方案:另外設(shè)一個(gè)標(biāo)志以區(qū)別隊(duì)空、隊(duì)滿S=0 (隊(duì)空)S=1 (隊(duì)滿)循環(huán)隊(duì)列:s=0表示隊(duì)列空,s=1且front=rear表示隊(duì)列滿1.5.1 線性鏈表的基本概念線性表順序存儲(chǔ)結(jié)構(gòu)的特點(diǎn):是一種簡(jiǎn)單、方便的存儲(chǔ)方式。它要求線性表的數(shù)據(jù)元素依次存放在連續(xù)的存儲(chǔ)單元中,從而利用數(shù)據(jù)元素的存儲(chǔ)順序表示相應(yīng)的邏輯順序,這種存儲(chǔ)方式屬于靜態(tài)存儲(chǔ)形

27、式。線性表順序存儲(chǔ)結(jié)構(gòu)暴露的問題在做插入或刪除元素的操作時(shí),會(huì)產(chǎn)生大量的數(shù)據(jù)元素移動(dòng);對(duì)于長(zhǎng)度變化較大的線性表,要一次性地分配足夠的存儲(chǔ)空間,但這些空間常常又得不到充分的利用;線性表的容量難以擴(kuò)充。1.5 線性鏈表線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)是指用一組任意的存儲(chǔ)單元(可以連續(xù),也可以不連續(xù))存儲(chǔ)線性表中的數(shù)據(jù)元素。因此,鏈表中結(jié)點(diǎn)的邏輯次序和物理次序不一定相同。為了能正確表示數(shù)據(jù)元素間的邏輯關(guān)系,對(duì)于每個(gè)數(shù)據(jù)元素不僅要表示它的具體內(nèi)容,還要附加一個(gè)表示它的直接后繼元素存儲(chǔ)位置的信息。這個(gè)信息稱為指針(pointer)或鏈(link)。這兩部分組成了鏈表中的結(jié)點(diǎn)結(jié)構(gòu): datalink指針域,用來存放結(jié)

28、點(diǎn)的直接后繼的地址數(shù)據(jù)域,用來存放結(jié)點(diǎn)的值 線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)例如 :線性表 (a, b,c,d)數(shù)據(jù)結(jié)構(gòu)中的每一個(gè)結(jié)點(diǎn)對(duì)應(yīng)于一個(gè)存儲(chǔ)單元,這種存儲(chǔ)單元稱為存儲(chǔ)結(jié)點(diǎn),簡(jiǎn)稱結(jié)點(diǎn)。結(jié)點(diǎn)由兩部分組成:(1)用于存儲(chǔ)數(shù)據(jù)元素值,稱為數(shù)據(jù)域;(2)用于存放指針,稱為指針域,用于指向前一個(gè)或后一個(gè)結(jié)點(diǎn)。在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)中,存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)空間可以不連續(xù),各數(shù)據(jù)結(jié)點(diǎn)的存儲(chǔ)順序與數(shù)據(jù)元素之間的邏輯關(guān)系可以不一致,而數(shù)據(jù)元素之間的邏輯關(guān)系是由指針域來確定的。鏈?zhǔn)酱鎯?chǔ)方式即可用于表示線性結(jié)構(gòu),也可用于表示非線性結(jié)構(gòu)。術(shù)語表示每個(gè)數(shù)據(jù)元素的兩部分信息組合在一起被稱為結(jié)點(diǎn);其中表示數(shù)據(jù)元素內(nèi)容的部分被稱為數(shù)據(jù)域(d

29、ata);表示直接后繼元素存儲(chǔ)地址的部分被稱為指針或指針域(next)。 headd cba單聯(lián)表結(jié)構(gòu)示意圖datalink其中,head是頭指針,它指向單鏈表中的第一個(gè)結(jié)點(diǎn),這是單鏈表操作的入口點(diǎn)。由于最后一個(gè)結(jié)點(diǎn)沒有直接后繼結(jié)點(diǎn),所以,它的指針域放入一個(gè)特殊的值NULL。NULL值在圖示中常用()符號(hào)表示。110 hat 200130 cat 135135 eat 170160 mat NULL165 bat 130170 fat 110200 jat 205205 lat 160165head頭指針數(shù)據(jù)域指針域例如:線性表(bat,cat,eat,fat,hat,jat,lat,mat)

30、 單鏈表只注重結(jié)點(diǎn)的邏輯順序,不關(guān)心每個(gè)結(jié)點(diǎn)的實(shí)際存儲(chǔ)位置,因此用箭頭來表示鏈域中的指針。bat cat eat mat head鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的特點(diǎn)(1)線性表中的數(shù)據(jù)元素在存儲(chǔ)單元中的存放順序與邏輯順序不一定一致;(2)在對(duì)線性表操作時(shí),只能通過頭指針進(jìn)入鏈表,并通過每個(gè)結(jié)點(diǎn)的指針域向后掃描其余結(jié)點(diǎn),這樣就會(huì)造成尋找第一個(gè)結(jié)點(diǎn)和尋找最后一個(gè)結(jié)點(diǎn)所花費(fèi)的時(shí)間不等,具有這種特點(diǎn)的存取方式被稱為順序存取方式。1.5.2 線性鏈表的基本運(yùn)算1、在線性鏈表中查找指定元素在對(duì)線性鏈表進(jìn)行插入或刪除的運(yùn)算中,總是首先需要找到插入或刪除的位置,這就需要對(duì)線性鏈表進(jìn)行掃描查找,要線性鏈表中指定值的前一個(gè)結(jié)點(diǎn)。

31、pabxs插入:在線性表兩個(gè)數(shù)據(jù)元素a和b間插入x,已知p指向as-link=p-link;p-link=s;pabc刪除:刪除鏈表中b結(jié)點(diǎn),已知p指向a結(jié)點(diǎn)p-link=p-link-link循環(huán)鏈表(circular linked list)循環(huán)鏈表是表中最后一個(gè)結(jié)點(diǎn)的指針指向頭結(jié)點(diǎn),使鏈表構(gòu)成環(huán)狀特點(diǎn):從表中任一結(jié)點(diǎn)出發(fā)均可找到表中其他結(jié)點(diǎn),提高查找效率操作與單鏈表基本一致,循環(huán)條件不同單鏈表p-link=NULL循環(huán)鏈表p-link=Hhh空表例題講解棧和隊(duì)列的共同特點(diǎn)是 A)都是先進(jìn)先出 B) 都是先進(jìn)后出 C) 只允許在端點(diǎn)處插入和刪除元素 D) 沒有共同點(diǎn)一些重要的程序語言(如C

32、語言和Pascal語言) 允許過程的遞歸調(diào)用。而實(shí)現(xiàn)遞歸調(diào)用中的存儲(chǔ)分配通常用 A) 棧B) 堆 C) 數(shù)組 D) 鏈表例題講解棧和隊(duì)列通常采用的存儲(chǔ)結(jié)構(gòu)是 A) 線性存儲(chǔ)結(jié)構(gòu)和鏈表存儲(chǔ)結(jié)構(gòu)B) 散列方式和索引方式 C) 鏈表存儲(chǔ)結(jié)構(gòu)和數(shù)組 D) 線性存儲(chǔ)結(jié)構(gòu)和非線性存儲(chǔ)結(jié)構(gòu)下列數(shù)據(jù)結(jié)構(gòu)中,按先進(jìn)后出原則組織數(shù)據(jù)的是 A) 線性鏈表 B) 棧 C) 循環(huán)鏈表 D) 順序表當(dāng)循環(huán)隊(duì)列非空且隊(duì)尾指針等于隊(duì)頭指針時(shí),說明循環(huán)隊(duì)列已滿,不能進(jìn)行入隊(duì)運(yùn)算。這種情況稱為 【2】 。上溢1.6樹與二叉樹 樹是一種簡(jiǎn)單的非線性結(jié)構(gòu),所有元素之間具有明顯的層次特性。在樹結(jié)構(gòu)中,每一個(gè)結(jié)點(diǎn)只有一個(gè)前件,稱為父結(jié)點(diǎn)

33、,沒有前件的結(jié)點(diǎn)只有一個(gè),稱為樹的根結(jié)點(diǎn),簡(jiǎn)稱樹的根。每一個(gè)結(jié)點(diǎn)可以有多個(gè)后件,稱為該結(jié)點(diǎn)的子結(jié)點(diǎn)。沒有后件的結(jié)點(diǎn)稱為葉子結(jié)點(diǎn)。在樹結(jié)構(gòu)中,一個(gè)結(jié)點(diǎn)所擁有的后件的個(gè)數(shù)稱為該結(jié)點(diǎn)的度,所有結(jié)點(diǎn)中最大的度稱為樹的度。樹的最大層次稱為樹的深度。樹是一種常用的非線性結(jié)構(gòu)。我們可以這樣定義:樹是n(n0)個(gè)結(jié)點(diǎn)的有限集合。若n=0,則稱為空樹;否則,有且僅有一個(gè)特定的結(jié)點(diǎn)被稱為根,當(dāng)n1時(shí),其余結(jié)點(diǎn)被分成m(m0)個(gè)互不相交的子集T1,T2,.,Tm,每個(gè)子集又是一棵樹。由此可以看出,樹的定義是遞歸。(C)是有13個(gè)結(jié)點(diǎn)的樹,其中A是根,其余結(jié)點(diǎn)分成3個(gè)子集: T1 、T2 、T3 。都是根A的子樹,且

34、本身也是一棵樹。例如: T1 其根為B,兩棵子樹為 T11 = F T12 = E, K, L , T12 又是一棵子樹,樹根為F,K 和 L是E的兩個(gè)互不相交的子集。結(jié)點(diǎn): 數(shù)據(jù)元素的內(nèi)容及其指向其子樹根的分支統(tǒng)稱為結(jié)點(diǎn)。結(jié)點(diǎn)的度 (Degree): 結(jié)點(diǎn)的分支數(shù),即結(jié)點(diǎn)擁有的子樹數(shù)。終端結(jié)點(diǎn)(葉子leaf): 度為0的結(jié)點(diǎn)。非終端結(jié)點(diǎn): 度不為0的結(jié)點(diǎn)。結(jié)點(diǎn)的層次: 樹中根結(jié)點(diǎn)的層次為1,根結(jié)點(diǎn)子樹的根為第2 層,以此類推。樹的度: 樹中所有結(jié)點(diǎn)度的最大值。樹的深度: 樹中所有結(jié)點(diǎn)層次的最大值。有序樹、無序樹: 如果樹中每棵子樹從左向右的排列擁有一定的順序,不得互換,則稱為有序樹,否則稱為

35、無序樹。術(shù)語1.6.2二叉數(shù)及其基本性質(zhì)1. 定義定義:二叉樹是另一種樹形結(jié)構(gòu)。它與樹形結(jié)構(gòu)的區(qū)別是: (1)每個(gè)結(jié)點(diǎn)最多有兩棵子樹; (2)子樹有左右之分。 二叉樹也可以用遞歸的形式定義。即:二叉樹是n(n0)個(gè)結(jié)點(diǎn)的有限集合。當(dāng)n=0時(shí),稱為空二叉樹;當(dāng)n0時(shí),有且僅有一個(gè)結(jié)點(diǎn)為二叉樹的根,其余結(jié)點(diǎn)被分成兩個(gè)互不相交的子集,一個(gè)作為左子集,另一個(gè)作為右子集,每個(gè)子集又是一個(gè)二叉樹。G HD E FB CA 二叉樹的特點(diǎn):(1)非空二叉樹只有一個(gè)根結(jié)點(diǎn);(2)每一個(gè)結(jié)點(diǎn)最多有兩棵子樹,且分別稱為該結(jié)點(diǎn)的左子樹與右子樹。二叉樹的5種形態(tài):(a)(b)(c)(d)(e)(a)空樹 (b)只有根結(jié)

36、點(diǎn)的二叉樹 (c) 右子樹為空的二叉樹 (d) 左子樹為空的二叉樹 (e) 左、右子樹均非空的二叉樹二叉樹具有下列5個(gè)重要的性質(zhì)?!拘再|(zhì)1】 在二叉樹的第i層上最多有2i-1個(gè)結(jié)點(diǎn)(i1)。 二叉樹的第1層只有一個(gè)根結(jié)點(diǎn),所以,i=1時(shí), 2i-1=21-1=20=1成立。假設(shè)對(duì)所有的j,1ji成立,即第j層上最多有2j-1個(gè)結(jié)點(diǎn)成立。若j=i-1,則第j層上最多有2j-1=2i-2個(gè)結(jié)點(diǎn)。由于在二叉樹中,每個(gè)結(jié)點(diǎn)的度最大為2,所以可以推導(dǎo)出第i層最多的結(jié)點(diǎn)個(gè)數(shù)就是第i-1層最多結(jié)點(diǎn)個(gè)數(shù)的2倍,即2i-2*2=2i-1。二叉樹的性質(zhì)【性質(zhì)2】 深度為K的二叉樹最多有2K-1個(gè)結(jié)點(diǎn)(K1)。由性

37、質(zhì)1可以得出,1至K層各層最多的結(jié)點(diǎn)個(gè)數(shù)分別為:20,21,22,23,.,2K-1。這是一個(gè)以2為比值的等比數(shù)列,前n項(xiàng)之和的計(jì)算公式為:其中 a1為第一項(xiàng),an為第k項(xiàng),q為比值??梢缘玫剑摂?shù)列前K項(xiàng)之和為:【性質(zhì)3】 對(duì)于任意一棵二叉樹BT,如果度為0的結(jié)點(diǎn)(葉子)個(gè)數(shù)為n0,度為2的結(jié)點(diǎn)個(gè)數(shù)為n2,則n0=n2+1。證明:1. 假設(shè)度為1的結(jié)點(diǎn)個(gè)數(shù)為n1,結(jié)點(diǎn)總數(shù)為n。 因?yàn)樵诙鏄渲?,所有結(jié)點(diǎn)的度均小于或等于2,所以結(jié)點(diǎn)總數(shù)為:n=n0+n1+n2 (1)2. 設(shè)B為二叉樹中的分支數(shù)從入支的角度看,即前驅(qū)結(jié)點(diǎn)的角度看,二叉樹中,除根結(jié)點(diǎn)之外,其余每個(gè)結(jié)點(diǎn)都有一個(gè)且只有一個(gè)前驅(qū)結(jié)點(diǎn),

38、即有一個(gè)從上向下的分支指向(即占有一個(gè)分支),所以,總的結(jié)點(diǎn)個(gè)數(shù)n與分支數(shù)B之間的關(guān)系為: n=B+1。 (2) 從出支的角度看,即后繼結(jié)點(diǎn)的角度看,因?yàn)樵诙鏄渲校葹?的結(jié)點(diǎn)沒有后繼結(jié)點(diǎn),即不占分支,度為1的結(jié)點(diǎn)有一個(gè)后繼結(jié)點(diǎn),產(chǎn)生1個(gè)分支,度為2的結(jié)點(diǎn)產(chǎn)生2個(gè)分支,所以分支數(shù)B可以表示為: B=n1+2n2。 (3)將此式代入上式,得:n=n1+2n2+1 (4)用(1)式減去(4)式,并經(jīng)過調(diào)整后得到:n0=n2+1。滿二叉樹:如果一個(gè)深度為K的二叉樹擁有2K-1個(gè)結(jié)點(diǎn),則將它稱為滿二叉樹。 8 9 10 11 12 13 14 154 5 6 72 31完全二叉樹:有一棵深度為h,具

39、有n個(gè)結(jié)點(diǎn)的二叉樹,若將它與一棵同深度的滿二叉樹中的所有結(jié)點(diǎn)按從上到下,從左到右的順序分別進(jìn)行編號(hào),且該二叉樹中的每個(gè)結(jié)點(diǎn)分別與滿二叉樹中編號(hào)為1n的結(jié)點(diǎn)位置一一對(duì)應(yīng),則稱這棵二叉樹為完全二叉樹。 8 9 10 11 12 4 5 6 72 31 7 8 94 5 6 2 31 4 5 62 31一棵滿二叉樹一定是一棵完全二叉樹,而一棵完全二叉樹不一定是滿二叉樹。完全二叉樹的特點(diǎn): (1)葉子結(jié)點(diǎn)只可能在層次最大的兩層上出現(xiàn) (2)對(duì)任意結(jié)點(diǎn),若其右分支下的子孫的最大層次是l ,則其左分支下的子孫的最大層次必是l 或l+1【性質(zhì)4】 具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度為 log2n+1。其中,lo

40、g2n 的結(jié)果是不大于log2n的最大整數(shù)。證明:假設(shè)具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度為K,則根據(jù)性質(zhì)2可以得出: 2K-1-1n2K-1將不等式兩端加1得到: 2K-1n2K將不等式中的三項(xiàng)同取以2為底的對(duì)數(shù),并經(jīng)過化簡(jiǎn)后得到: K-1log2n 1其雙親結(jié)點(diǎn)的編號(hào)為 i/2。(2)如果2in,則結(jié)點(diǎn)i沒有左孩子(結(jié)點(diǎn)i為葉子結(jié)點(diǎn));否則其左孩子結(jié)點(diǎn)的編號(hào)為2i。(3)如果2i+1n,則結(jié)點(diǎn)i沒有右孩子;否則其右孩子結(jié)點(diǎn)的編號(hào)為2i+1。 2i +2 2i 2i+1 2i+2 2i+3 i+1 2i 2i+1i i i+1二叉樹的基本性質(zhì): (1)在二叉樹的第k層上,最多有2k-1(k1)個(gè)結(jié)

41、點(diǎn);(2)深度為m的二叉樹最多有2 m -1個(gè)結(jié)點(diǎn);(3)度為0的結(jié)點(diǎn)(即葉子結(jié)點(diǎn))總是比度為2的結(jié)點(diǎn)多一個(gè);(4)具有n個(gè)結(jié)點(diǎn)的二叉樹,其深度至少為log2n+1,其中l(wèi)og2n表示取log2n的整數(shù)部分;(5)具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度為log2n+1;滿二叉樹是指除最后一層外,每一層上的所有結(jié)點(diǎn)有兩個(gè)子結(jié)點(diǎn)。完全二叉樹是指除最后一層外,每一層上的結(jié)點(diǎn)數(shù)均達(dá)到最大值,在最后一層上只缺少右邊的若干結(jié)點(diǎn)。1.6.3 二叉樹的存儲(chǔ)結(jié)構(gòu)二叉樹通常使用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) 常見的二叉樹結(jié)點(diǎn)結(jié)構(gòu)如下所示:G HD E FB CA G H D E F B CABT1.6.4二叉的遍歷二叉樹是一

42、種非線性的數(shù)據(jù)結(jié)構(gòu),在對(duì)它進(jìn)行操作時(shí),總是需要逐一對(duì)每個(gè)數(shù)據(jù)元素實(shí)施操作,這樣就存在一個(gè)操作順序問題,由此提出了二叉樹的遍歷操作。所謂遍歷二叉樹就是按某種順序訪問二叉樹中的每個(gè)結(jié)點(diǎn)一次且僅一次的過程。這里的訪問可以是輸出、比較、更新、查看元素內(nèi)容等等各種操作。二叉樹的遍歷方式為:按根、左子樹和右子樹三個(gè)部分進(jìn)行訪問;下面我們將分別進(jìn)行討論。1. 按根、左子樹和右子樹三部分進(jìn)行遍歷遍歷二叉樹的順序存在下面三種順序DLR、LDR和LRD,根據(jù)根訪問的位置不同分別被稱為先序遍歷、中序遍歷和后序遍歷。(1)先序遍歷若二叉樹為空,則結(jié)束遍歷操作;否則訪問根結(jié)點(diǎn);先序遍歷左子樹;先序遍歷右子樹。(2)中序

43、遍歷若二叉樹為空,則結(jié)束遍歷操作;否則中序遍歷左子樹;訪問根結(jié)點(diǎn);中序遍歷右子樹。(3)后序遍歷若二叉樹為空,則結(jié)束遍歷操作;否則后序遍歷左子樹;后序遍歷右子樹;訪問根結(jié)點(diǎn)。G HB CAD E F先序序列:ABDGCEFH中序序列:DGBAECHF后序序列:GDBEHFCA下面是一棵二叉樹及其經(jīng)過三種遍歷得到的相應(yīng)序列。例題講解已知二叉樹后序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷序列是 A) acbed B) decab C) deabc D) cedba 已知一棵二叉樹前序遍歷和中序遍歷分別為ABDEGCFH和DBGEACHF,則該二叉樹的后序遍歷為 A) GEDHF

44、BCA B) DGEBHFCA C) ABCDEFGH D) ACBFEDHG樹是結(jié)點(diǎn)的集合,它的根結(jié)點(diǎn)數(shù)目是 A) 有且只有1B) 1或多于1 C) 0或1D) 至少2下列敘述中正確的是 A) 線性表是線性結(jié)構(gòu)B) 棧與隊(duì)列是非線性結(jié)構(gòu) C) 線性鏈表是非線性結(jié)構(gòu)D) 二叉樹是線性結(jié)構(gòu)例題講解在深度為5的滿二叉樹中,葉子結(jié)點(diǎn)的個(gè)數(shù)為 A) 32B) 31 C) 16 D) 15 若某二叉樹的前序遍歷訪問順序是abdgcefh,中序遍歷訪問順序是dgbaechf,則其后序遍歷的結(jié)點(diǎn)訪問順序是 A) bdgcefha B) gdbecfha C) bdgaechf D) gdbehfca在樹結(jié)構(gòu)

45、中,樹根結(jié)點(diǎn)沒有 【1】 。具有3個(gè)結(jié)點(diǎn)的二叉樹有 A) 2種形態(tài) B) 4種形態(tài) C) 7種形態(tài) D) 5種形態(tài)設(shè)一棵二叉樹中有3個(gè)葉子結(jié)點(diǎn),有8個(gè)度為1的結(jié)點(diǎn),則該二叉樹中總的結(jié)點(diǎn)數(shù)為 A) 12 B) 13 C) 14D) 15 雙親結(jié)點(diǎn)設(shè)有下列二叉樹: 對(duì)此二叉樹前序遍歷的結(jié)果為A) ZBTTCPXA B) ATBZXCTP C) ZBTACTXP D) ATBZXCPT設(shè)有下列二叉樹:對(duì)此二叉樹的中序遍歷的結(jié)果為A) ABCDEF B) DBEAFC C) ABDECF D) DEBFCA1.7 查找技術(shù) 查找是在一個(gè)給定的數(shù)據(jù)結(jié)構(gòu)中,根據(jù)給定的條件查找滿足條件的結(jié)點(diǎn)。不同的數(shù)據(jù)結(jié)構(gòu)

46、采用不同的查找方法。查找的效率直接影響數(shù)據(jù)處理的效率。查找的結(jié)果:查找成功:找到滿足條件的結(jié)點(diǎn)查找失?。赫也坏綕M足條件的結(jié)點(diǎn)。1.7.1順序查找過程: 對(duì)給定的一關(guān)鍵字K,從線性表的一端開始,逐個(gè)進(jìn)行記錄的關(guān)鍵字和K的比較,直到找到關(guān)鍵字等于K的記錄或到達(dá)表的另一端。可以采用從前向后查,也可采用從后向前查的方法。 在平均情況下,大約要與表中一半以上元素進(jìn)行比較,效率較低。平均查找長(zhǎng)度較大。在下面兩種情況下只能采取順序查找: a. 線性表為無序表(元素排列是無序的); b. 即使是有序線性表,但采用的是鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。1.7.2二分法查找二分法查找只適用于順序存儲(chǔ)的有序表。對(duì)于長(zhǎng)度為n的有序線性表

47、,最壞情況只需比較log2n次。 假設(shè)查找表存放在數(shù)組a的a1an中,且升序,查找關(guān)鍵字值為k。折半查找的主要步驟為: (1)置初始查找范圍:low=1,high=n; (2)求查找范圍中間項(xiàng):mid=(low+high)/2 (3)將指定的關(guān)鍵字值k與中間項(xiàng)amid.key比較若相等,查找成功,找到的數(shù)據(jù)元素為此時(shí)mid 指向的位置; 若小于,查找范圍的低端數(shù)據(jù)元素指針low不變,高端數(shù)據(jù)元素指針high更新為mid-1; 若大于,查找范圍的高端數(shù)據(jù)元素指針high不變,低端數(shù)據(jù)元素指針low更新為mid+1;(4)重復(fù)步驟(2)、(3)直到查找成功或查找范圍空(lowhigh),即查找失敗

48、為止。(5)如果查找成功,返回找到元素的存放位置,即當(dāng)前的中間項(xiàng)位置指針mid;否則返回查找失敗標(biāo)志。查找23和79的過程如下圖:mid=(low+high)/2不進(jìn)位取整( 08, 14, 23, 37, 46, 55, 68, 79, 91 )( 08, 14, 23, 37, 46, 55, 68, 79, 91 )lowhighmid( 08, 14, 23, 37, 46, 55, 68, 79, 91 )high=mid-1mid( 08, 14, 23, 37, 46, 55, 68, 79, 91 )low=mid+1highmid( 08, 14, 23, 37, 46, 5

49、5, 68, 79, 91 )lowhighmid( 08, 14, 23, 37, 46, 55, 68, 79, 91 )lowhighmid( 08, 14, 23, 37, 46, 55, 68, 79, 91 )lowhighmidlow1.8排序技術(shù)排序是指將一個(gè)無序序列整理成按值非遞減順序排列的有序序列。1.8.1交換排序所謂交換類排序法是指借助數(shù)據(jù)元素之間的互相交換進(jìn)行的排序的一種方法。1.冒泡排序冒泡排序是一種最簡(jiǎn)單的交換類排序方法,它是通過相鄰數(shù)據(jù)元素的交換逐步將線性表變成有序。冒泡排序法,需要比較的次數(shù)為n(n-1)/2; .快速排序.8.2插入類排序簡(jiǎn)單插入排序法最壞情

50、況需要n(n-1)/2次比較; .希爾排序法最壞情況需要O(n1.5)次比較。例如:16 25 12 30 47 11 23 36 9 18 31 第一趟希爾排序,設(shè)增量 d =511 23 12 9 18 16 25 36 30 47 31 第二趟希爾排序,設(shè)增量 d = 39 18 12 11 23 16 25 31 30 47 36第三趟希爾排序,設(shè)增量 d = 1 9 11 12 16 18 23 25 30 31 36 47 1.8.3選擇類排序法(1)簡(jiǎn)單選擇排序法最壞情況需要n(n-1)/2次比較;(2)堆排序法最壞情況需要O(nlog2n)次比較。排序方法插入排序選擇排序交換排

51、序歸并排序簡(jiǎn)單插入排序希爾排序簡(jiǎn)單選擇排序堆排序起泡排序快速排序方法歸并排序簡(jiǎn)單插入希爾排序簡(jiǎn)單選擇堆排序起泡排序快速排序插入選擇交換比較次數(shù)使用建議查找:方法順序折半比較次數(shù)log2n最好:1最壞:n平均:(n+1)/2使用條件順序存儲(chǔ)結(jié)構(gòu)的有序表任何表排序:n-1n(n-1)/2n1.5n(n-1)/2nlog2nn-1n(n-1)/2log2nn(n-1)/2正序的表、n小的表與表的初始數(shù)據(jù)無關(guān)、n小的表正序的表、n小的表n大的表,但逆序的表會(huì)蛻變?yōu)槠鹋菖判蚪柚o助空間最多的方法n大的表例題講解在長(zhǎng)度為n的有序線性表中進(jìn)行二分查找。最壞的情況下,需要的比較次數(shù)為 【2】 。長(zhǎng)度為n的順序

52、存儲(chǔ)線性表中,當(dāng)在任何位置上插入一個(gè)元素概率都相等時(shí),插入一個(gè)元素所需移動(dòng)元素的平均個(gè)數(shù)為 【1】 。 假設(shè)線性表的長(zhǎng)度為n,則在最壞情況下,冒泡排序需要的比較次數(shù)為 A) log2n B) n2 C) O(n1.5) D) n(n-1)/2已知數(shù)據(jù)表A中每個(gè)元素距其最終位置不遠(yuǎn),為節(jié)省時(shí)間,應(yīng)采用的算法是 A) 堆排序B) 直接插入排序 C) 快速排序 D) 直接選擇排序 例題講解log2nn/2 冒泡排序算法在最好的情況下的元素交換次數(shù)為 【1】 。 在最壞情況下,堆排序需要比較的次數(shù)為 【2】 。 最簡(jiǎn)單的交換排序方法是 A) 快速排序 B) 選擇排序 C) 堆排序D) 冒泡排序排序是計(jì)

53、算機(jī)程序設(shè)計(jì)中的一種重要操作,常見的排序方法有插入排序、 【1】 和選擇排序等。0nlog2n交換排序第二章 程序設(shè)計(jì)基礎(chǔ)2.1 程序設(shè)計(jì)方法和風(fēng)格程序設(shè)計(jì)方法和技術(shù)主要經(jīng)過了結(jié)構(gòu)化程序設(shè)計(jì)和面向?qū)ο蟪绦蛟O(shè)計(jì)。程序是由人編寫出來的,為了測(cè)試和維護(hù)程序,往往還需要閱讀和跟蹤程序,因此程序設(shè)計(jì)風(fēng)格應(yīng)該強(qiáng)調(diào)簡(jiǎn)單和清晰。“清晰第一,效率第二”的觀點(diǎn)已成為主導(dǎo)的設(shè)計(jì)風(fēng)格。要形成良好的程序設(shè)計(jì)風(fēng)格,主要應(yīng)注意和考慮下述4因素:1.源程序文檔化符號(hào)名的命名程序注釋(序言性注釋和功能性注釋)程序的視覺組織2.數(shù)據(jù)說明的方法數(shù)據(jù)說明的次序應(yīng)該規(guī)范化說明語句中變量安排規(guī)范化使用注釋對(duì)復(fù)雜數(shù)據(jù)結(jié)構(gòu)進(jìn)行說明3. 語句

54、的結(jié)構(gòu)在一行內(nèi)寫一條語句程序編寫應(yīng)優(yōu)先考慮清晰性除非對(duì)效率有特殊要求,程序編寫要做到清晰第一,效率第二首先要保證程序正確,然后才要求提高速度避免使用臨時(shí)變量而使程序的可讀性下降避免不必要的轉(zhuǎn)移(GOTO語句)4. 輸入和輸出對(duì)所有輸入數(shù)據(jù)進(jìn)行校驗(yàn)和合理性檢查2.2 結(jié)構(gòu)化程序設(shè)計(jì)2.2.1結(jié)構(gòu)化程序設(shè)計(jì)的原則自頂向下逐步求精模塊化限制使用goto語句2.2.2結(jié)構(gòu)化程序的基本結(jié)構(gòu)與特點(diǎn)順序結(jié)構(gòu)選擇結(jié)構(gòu)重復(fù)(循環(huán))結(jié)構(gòu)總之,結(jié)構(gòu)化程序設(shè)計(jì)方法的優(yōu)點(diǎn):1.程序易于理解,使用和維護(hù)。2.提高了編程工作的效率,降低了軟件開發(fā)的成本。 三種基本結(jié)構(gòu)的特點(diǎn)只有一個(gè)入口只有一個(gè)出口每一個(gè)基本結(jié)構(gòu)中的每一部分

55、都有機(jī)會(huì)執(zhí)行到結(jié)構(gòu)內(nèi)不存在“死循環(huán)”2.3 面向?qū)ο蟮某绦蛟O(shè)計(jì)面向?qū)ο蠓椒ㄒ呀?jīng)發(fā)展成為主流的軟件開發(fā)方法。主要優(yōu)點(diǎn):與人類習(xí)慣的思維方法一致穩(wěn)定性好可重用性好易于開發(fā)大型軟件產(chǎn)品可維護(hù)性好2.3.2 基本概念對(duì)象(Object)對(duì)象是基本的運(yùn)行時(shí)認(rèn)得實(shí)體,它既包括數(shù)據(jù)(屬性),也包括作用于數(shù)據(jù)的操作(行為)。對(duì)象是由描述該對(duì)象屬性的數(shù)據(jù)以及可以對(duì)這些數(shù)據(jù)施加的所有操作封裝在一起構(gòu)成的統(tǒng)一體??梢员硎究陀^世界中的任何實(shí)體,可以是具體的,也可以是抽象的。一個(gè)對(duì)象把屬性和行為封裝為一個(gè)整體一個(gè)對(duì)象通常可由對(duì)象名、屬性和操作3部分組成對(duì)象的基本特性: (1)標(biāo)識(shí)唯一性 (對(duì)象可區(qū)分) (2)分類性 (

56、對(duì)象抽象成類) (3)多態(tài)性 (同一操作可以是不同對(duì)象的行為) (4)封裝性 (只能看到對(duì)象的外部特性) (5)模塊獨(dú)立性好(對(duì)象內(nèi)部各元素結(jié)合緊密、內(nèi)聚性強(qiáng))類(Class)和實(shí)例(Instance)將屬性、操作相似的對(duì)象歸為類。類是具有共同屬性、共同方法的對(duì)象的集合。對(duì)象則是對(duì)應(yīng)的類的一個(gè)實(shí)例。消息(Message)對(duì)象間的這種相互合作需要一個(gè)機(jī)制協(xié)助進(jìn)行,這樣的機(jī)制叫做“消息”。消息是實(shí)例和實(shí)例之間傳遞的信息。消息由接收消息的對(duì)象的名稱+消息標(biāo)識(shí)符參數(shù)組成。例如:MyCircle.Show (GREEN)繼承(Inheritance)繼承是父類和子類之間共享數(shù)據(jù)的方法的機(jī)制一個(gè)子類可以繼

57、承它的父類(或祖先類)中的屬性和操作子類中可以定義自己的屬性和操作單重繼承、多重繼承繼承性的優(yōu)點(diǎn)是:相似的對(duì)象可以共享程序代碼和數(shù)據(jù)結(jié)構(gòu),從而大大減少了程序中的冗余信息,提高了軟件的可重用性,便于軟件修改維護(hù)。多態(tài)性(Polymorphism)不同的對(duì)象收到同一消息可以產(chǎn)生完全不同的行動(dòng),這一現(xiàn)象叫做多態(tài)性多態(tài)的實(shí)現(xiàn)受到繼承的支持同樣的消息可以發(fā)送給不同的對(duì)象。例題講解結(jié)構(gòu)化程序設(shè)計(jì)的3種結(jié)構(gòu)是 A) 順序結(jié)構(gòu)、選擇結(jié)構(gòu)、轉(zhuǎn)移結(jié)構(gòu) B) 分支結(jié)構(gòu)、等價(jià)結(jié)構(gòu)、循環(huán)結(jié)構(gòu) C) 多分支結(jié)構(gòu)、賦值結(jié)構(gòu)、等價(jià)結(jié)構(gòu) D) 順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)在設(shè)計(jì)程序時(shí),應(yīng)采納的原則之一是 A) 不限制goto語

58、句的使用 B) 減少或取消注解行 C) 程序越短越好D) 程序結(jié)構(gòu)應(yīng)有助于讀者理解結(jié)構(gòu)化程序設(shè)計(jì)主要強(qiáng)調(diào)的是 A) 程序的規(guī)模B) 程序的效率 C) 程序設(shè)計(jì)語言的先進(jìn)性 D) 程序易讀性對(duì)建立良好的程序設(shè)計(jì)風(fēng)格,下面描述正確的是 A) 程序應(yīng)簡(jiǎn)單、清晰、可讀性好 B) 符號(hào)名的命名只要符合語法 C) 充分考慮程序的執(zhí)行效率 D) 程序的注釋可有可無在結(jié)構(gòu)化程序設(shè)計(jì)思想提出之前,在程序設(shè)計(jì)中曾強(qiáng)調(diào)程序的效率,現(xiàn)在,與程序的效率相比,人們更重視程序的 A) 安全性B) 一致性 C) 可理解性D) 合理性程序的3種基本控制結(jié)構(gòu)是 A) 過程、子過程和分程序B) 順序、選擇和重復(fù) C) 遞歸、堆棧和

59、隊(duì)列 D) 調(diào)用、返回和轉(zhuǎn)移下列敘述中,不屬于結(jié)構(gòu)化程序設(shè)計(jì)方法的主要原則的是 A) 自頂向下 B) 由底向上 C) 模塊化D) 限制使用goto語句 對(duì)象實(shí)現(xiàn)了數(shù)據(jù)和操作的結(jié)合,是指對(duì)數(shù)據(jù)和數(shù)據(jù)的操作進(jìn)行 A) 結(jié)合 B) 隱藏 C) 封裝 D) 抽象在面向?qū)ο蠓椒ㄖ?,一個(gè)對(duì)象請(qǐng)求另一個(gè)對(duì)象為其服務(wù)的方式是通過發(fā)送A)調(diào)用語句 B)命令 C)口令 D)消息下列對(duì)象概念描述錯(cuò)誤的是A)任何對(duì)象都必須有繼承性B)對(duì)象是屬性和方法的封裝體C)對(duì)象間的通訊靠消息傳遞D)操作是對(duì)象的動(dòng)態(tài)屬性下列敘述中,不屬于結(jié)構(gòu)化分析方法的是 A) 面向數(shù)據(jù)流的結(jié)構(gòu)化分析方法 B) 面向數(shù)據(jù)結(jié)構(gòu)的Jackson方法

60、C) 面向數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)系統(tǒng)開發(fā)方法 D) 面向?qū)ο蟮姆治龇椒?在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,類描述的是具有相似性質(zhì)的一組 【3】 在面向?qū)ο蠓椒ㄖ?,類之間共享屬性和操作的機(jī)制稱為 【2】 。 一個(gè)類可以從直接或間接的祖先中繼承所有屬性和方法。采用這個(gè)方法提高了軟件的 【3】 。 對(duì)象的共同行為和屬性繼承可重用性面向?qū)ο蟮哪P椭校罨镜母拍钍菍?duì)象和 【3】 。 在面向?qū)ο蟮脑O(shè)計(jì)中,用來請(qǐng)求對(duì)象執(zhí)行某一處理或回答某些信息的要求稱為 【4】 。 在程序設(shè)計(jì)階段應(yīng)該采取 【2】 和逐步求精的方法,把一個(gè)模塊的功能逐步分解,細(xì)化為一系列具體的步驟,進(jìn)而用某種程序設(shè)計(jì)語言寫成程序。在面向?qū)ο蠓椒ǚN,類

溫馨提示

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

評(píng)論

0/150

提交評(píng)論