計算機2級公共基礎(chǔ)知識2_第1頁
計算機2級公共基礎(chǔ)知識2_第2頁
計算機2級公共基礎(chǔ)知識2_第3頁
計算機2級公共基礎(chǔ)知識2_第4頁
計算機2級公共基礎(chǔ)知識2_第5頁
已閱讀5頁,還剩125頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機等級考試

公共基礎(chǔ)知識

第2頁計算機二級考試公共基礎(chǔ)知識大綱

數(shù)據(jù)結(jié)構(gòu)與算法程序設(shè)計基礎(chǔ)軟件工程基礎(chǔ)數(shù)據(jù)庫設(shè)計基礎(chǔ)這四個方面在試卷中出現(xiàn)的情況是:選擇題10個(20分),填空題5個(10分),總分值占到了試卷卷面分的30%,是一個不小的比例。

第3頁計算機二級考試公共基礎(chǔ)知識試卷分析

章節(jié)考試時間數(shù)據(jù)結(jié)構(gòu)與算法程序設(shè)計基礎(chǔ)軟件工程基礎(chǔ)數(shù)據(jù)庫設(shè)計基礎(chǔ)2007年4月10分2分10分8分2007年9月12分4分8分6分2008年4月10分2分8分10分2008年9月10分2分8分10分2009年3月10分2分8分10分2009年9月10分2分8分10分2010年3月10分0分10分10分第4頁算法⒈算法的基本概念

2.算法復雜度的概念和意義

一、基本數(shù)據(jù)結(jié)構(gòu)與算法

數(shù)據(jù)結(jié)構(gòu)⒈數(shù)據(jù)結(jié)構(gòu)的概念⒉線性表⒊棧和隊列⒋樹與二叉樹⒌查找技術(shù)⒍排序技術(shù)

對于等級考試,這個部分的考核重點主要在算法和數(shù)據(jù)結(jié)構(gòu)的基本概念、二叉樹(遍歷、結(jié)點),還有排序和查找考試中也經(jīng)常會涉及到。第5頁算法的定義對解題方案準確而完整的描述稱為算法。算法是程序設(shè)計的核心⒈算法的基本概念

算法是在有限步驟內(nèi)求解某一問題所使用的一組定義明確的規(guī)則。通俗點說,就是計算機解題的過程(計算的方法)。在這個過程中,無論是形成解題思路(推理實現(xiàn)的算法)還是編寫程序(操作實現(xiàn)的算法),都是在實施某種算法。例:n個數(shù)從大到小進行排序。

有多種排序方法,常用的有冒泡排序、選擇排序等。算法不等于程序,也不等計算機方法,程序的編制不可能優(yōu)于算法的設(shè)計。第6頁

2.

算法的基本特征一個算法應(yīng)該具有以下五個重要的特征:

有窮性確定性輸入輸出可行性一個算法必須保證執(zhí)行有限步之后結(jié)束;算法的每一步驟必須有確切的定義;一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身定出了初始條件;一個算法有一個或多個輸出,以反映對輸入數(shù)據(jù)加工后的結(jié)果。沒有輸出的算法是毫無意義的;算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算后即可完成擁有足夠的情報第7頁算法與計算機程序算法——是一組邏輯步驟程序——用計算機語言描述的算法3.算法的表示INPUTrS=3.14*r*rPTINTS開始輸入RS=3.14*

R*R輸出S結(jié)束問題:輸入園的半徑,計算園的面積

一個算法的表示需要使用一些語言形式。傳統(tǒng)的算法-------圖形法,如“流程圖”和N-S圖目前常用的方法-------使用偽碼描述算法。第8頁冒泡排序的方法:1.掃描整個線性表,逐次對相鄰的兩個元素進行比較,若為逆序,則交換;第一趟掃描的結(jié)果使最大的元素排到表的最后;2.除最后一個元素,對剩余的元素重復上述過程,將次大的數(shù)排到表的倒數(shù)第二個位置;3.重復上述過程;對于長度為n的線性表,冒泡排序需要對表掃描n-1遍。

算法舉例:n個數(shù)排序第9頁4.算法的兩個基本要素:基本運算和操作算術(shù)運算關(guān)系運算邏輯運算數(shù)據(jù)傳輸控制結(jié)構(gòu)

順序選擇循環(huán)一是對數(shù)據(jù)對象的運算和操作;二是算法的控制結(jié)構(gòu)。算法基本設(shè)計方法:列舉法、歸納法、遞推、遞歸、減半遞推技術(shù)、回溯法

第10頁5.

算法的復雜度評價一個算法優(yōu)劣的主要標準是算法的執(zhí)行效率和存儲需求:時間復雜度:執(zhí)行這個算法所需要的計算工作量一般可以用算法在執(zhí)行過程中所需基本運算的執(zhí)行次數(shù)來度量計算工作量空間復雜度:執(zhí)行這個算法所需要的內(nèi)存空間

算法在執(zhí)行過程中臨時占用的存儲空間

時間復雜度它大致等于計算機執(zhí)行一種簡單操作所需的平均時間與算法中進行簡單操作的次數(shù)的乘積。

一個算法在計算機存儲器上所占用的存儲空間,包括存儲算法本身所占用的存儲空間、算法中的輸入輸出數(shù)據(jù)所占用的存儲空間和算法在運行過程中臨時占用的存儲空間這三個部分時間復雜度用“O(數(shù)量級)”來表示,稱為“階”。常見的時間復雜度有:O(1)常數(shù)階;O(log2n)對數(shù)階;O(n)線性階;O(n2)平方階。第11頁(1)在計算機中,算法是指______。

A.查詢方法B.加工方法

C.解題方案的準確而完整的描述D.排序方法(2)下列敘述中正確的是______。A)算法的效率只與問題的規(guī)模有關(guān),而與數(shù)據(jù)的存儲結(jié)構(gòu)無關(guān)B)算法的時間復雜度是指執(zhí)行算法所需要的計算工作量C)數(shù)據(jù)的邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)是一一對應(yīng)的D)算法的時間復雜度與空間復雜度一定相關(guān)(3)算法的有窮性是指______。A)算法程序的運行時間是有限的B)算法程序所處理的數(shù)據(jù)量是有限的C)算法程序的長度是有限的D)算法只能被有限的用戶使用(c)(B)算法習題:(A)第12頁(4)算法的時間復雜度是指______。

A)算法的執(zhí)行時間

B)算法所處理的數(shù)據(jù)量

C)算法程序中的語句或指令條數(shù)

D)算法在執(zhí)行過程中所需要的基本運算次數(shù)(5)算法的空間復雜度是指

______。A)算法在執(zhí)行過程中所需要的計算機存儲空間B)算法所處理的數(shù)據(jù)量C)算法程序中的語句或指令條數(shù)D)算法在執(zhí)行過程中所需要的臨時工作單元數(shù)(6)下列敘述中正確的是______。

A)一個算法的空間復雜度大,則其時間復雜度也必定大

B)一個算法的空間復雜度大,則其時間復雜度必定小

C)一個算法的時間復雜度大,則其空間復雜度必定小

D)上述三種說法都不對(D)計算工作量(A)(D)算法的時間復雜度是指A)執(zhí)行算法程序所需要的時間B)算法程序的長度C)算法執(zhí)行過程中所需要的基本運算次數(shù)D)算法程序中的指令條數(shù)算法的基本特征是可行性、確定性、

【1】和擁有足夠的情報。算法的空間復雜度是指

A)算法程序的長度 B)算法程序中的指令條數(shù)

C)算法程序所占的存儲空間D)執(zhí)行過程中所需要的存儲空間在計算機中,算法是指

A)加工方法 B)解題方案的準確而完整的描述

C)排序方法 D)查詢方法例題講解有窮性算法分析的目的是

A)找出數(shù)據(jù)結(jié)構(gòu)的合理性B)找出算法中輸入和輸出之間的關(guān)系

C)分析算法的易懂性和可靠性 D)分析算法的效率以求改進算法的工作量大小和實現(xiàn)算法所需的存儲單元多少分別稱為算法的【1】。時間復雜度和空間復雜度第15頁

計算機在進行數(shù)據(jù)處理時,實際需要處理的數(shù)據(jù)元素一般有很多,而這些大量的數(shù)據(jù)元素都需要存放在計算機中,因此,大量的數(shù)據(jù)元素在計算機中如何組織,以便提高數(shù)據(jù)處理的效率,并且節(jié)省計算機的存儲空間,這是進行數(shù)據(jù)處理的關(guān)鍵問題。二、數(shù)據(jù)結(jié)構(gòu)程序=算法+數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)是指相互有關(guān)聯(lián)的數(shù)據(jù)元素的集合。

一般來說,人們不會同時處理特征完全不同且互相之間沒有任何關(guān)系的各類數(shù)據(jù)元素,對于具有不同特征的數(shù)據(jù)元素總是分別進行處理。一般情況下,在具有相同特征的數(shù)據(jù)元素集合中,各個數(shù)據(jù)元素之間存在有某種關(guān)系(即聯(lián)系),這種關(guān)系反映了該集合中的數(shù)據(jù)元素所固有的一種結(jié)構(gòu)。超市的物品如何存放才好找且節(jié)省空間呢?第16頁二.數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)是指相互有關(guān)聯(lián)的數(shù)據(jù)元素的集合。數(shù)據(jù)結(jié)構(gòu)是研究數(shù)據(jù)和數(shù)據(jù)之間關(guān)系的一門學科,它包括三個方面。

(1)數(shù)據(jù)集合中各數(shù)據(jù)元素之間所固有的邏輯關(guān)系,即數(shù)據(jù)的邏輯結(jié)構(gòu);(2)在對數(shù)據(jù)進行處理時,各數(shù)據(jù)元素在計算機中的存儲關(guān)系,即數(shù)據(jù)的存儲結(jié)構(gòu);(3)對各種數(shù)據(jù)結(jié)構(gòu)進行的運算(操作)。第17頁1.邏輯結(jié)構(gòu)

數(shù)據(jù)的邏輯結(jié)構(gòu)是指反映數(shù)據(jù)元素之間邏輯關(guān)系的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)的邏輯結(jié)構(gòu)包含:(1)表示數(shù)據(jù)元素的信息;(2)表示各數(shù)據(jù)元素之間的前后件關(guān)系。例:1.一年四季的數(shù)據(jù)結(jié)構(gòu)

B=(D,R)D={春,夏,秋,冬}R={(春,夏),(夏,秋),(秋,冬)}2.家庭成員的數(shù)據(jù)結(jié)構(gòu)

B=(D,R)D={父親,兒子,女兒}R={(父親,兒子),(父親,女兒)}春夏秋冬數(shù)據(jù)結(jié)構(gòu)的圖形表示父親兒子女兒第18頁常見的邏輯結(jié)構(gòu)有:線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖形結(jié)構(gòu)。線性結(jié)構(gòu)樹形結(jié)構(gòu)圖形結(jié)構(gòu)①線性結(jié)構(gòu)結(jié)構(gòu)中的每個元素之間存在一個對一個的關(guān)系;②樹形結(jié)構(gòu)結(jié)構(gòu)中的每個元素之間存在一個對多個的關(guān)系;③圖形結(jié)構(gòu)或網(wǎng)狀結(jié)構(gòu)結(jié)構(gòu)中的每個元素之間存在多個對多個的關(guān)系。其中,樹形結(jié)構(gòu)和圖形結(jié)構(gòu)統(tǒng)稱為非線形結(jié)構(gòu)。數(shù)據(jù)的邏輯結(jié)構(gòu)可以用二元關(guān)系表示,也可以直觀地用圖形來表示。第19頁2.存儲結(jié)構(gòu)(物理結(jié)構(gòu))計算機在實際進行數(shù)據(jù)處理時,被處理的各數(shù)據(jù)元素總是被存放在計算機的存儲空間中,并且,各數(shù)據(jù)元素在計算機存儲空間中的位置與它們的邏輯關(guān)系不一定是相同的,而且一般也不可能相同。如:一年四季

家庭成員計算機存儲空間怎樣存放?

存儲結(jié)構(gòu)指數(shù)據(jù)結(jié)構(gòu)在計算機存儲空間中的具體實現(xiàn)。常見的存儲結(jié)構(gòu)有:順序存儲結(jié)構(gòu)鏈式存儲結(jié)構(gòu)索引存儲結(jié)構(gòu)只抽象地反映數(shù)據(jù)元素之間的關(guān)系的結(jié)構(gòu),而不管其存儲方式的數(shù)據(jù)結(jié)構(gòu)稱為邏輯結(jié)構(gòu)。一種數(shù)據(jù)結(jié)構(gòu)可以根據(jù)需要表示成一種或多種存儲結(jié)構(gòu)。第20頁3.數(shù)據(jù)的運算檢索插入刪除更新排序

通常,一個數(shù)據(jù)結(jié)構(gòu)中的元素結(jié)點可能是動態(tài)變化的。根據(jù)需要或在處理過程中,可以在一個數(shù)據(jù)結(jié)構(gòu)中增加一個新結(jié)點(插入運算),也可以刪除某個結(jié)點(刪除運算),除此之外,對數(shù)據(jù)結(jié)構(gòu)的運算還有查找、分類、合并、分解、復制和修改。在對數(shù)據(jù)結(jié)構(gòu)的處理過程中,不僅數(shù)據(jù)結(jié)構(gòu)中結(jié)點的個數(shù)在動態(tài)變化,而且,各數(shù)據(jù)元素之間的關(guān)系也有可能在動態(tài)地變化。如:無序表變有序表數(shù)據(jù)結(jié)構(gòu)是研究數(shù)據(jù)和數(shù)據(jù)之間關(guān)系的一門學科,研究以下三方面內(nèi)容:數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)的存儲結(jié)構(gòu)數(shù)據(jù)的運算父親兒子女兒第21|92頁常見的數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu)分類

線性結(jié)構(gòu)與非線性結(jié)構(gòu)兩大類型線性結(jié)構(gòu):一個非空的數(shù)據(jù)結(jié)構(gòu)若滿足下面的兩個條件,則這種數(shù)據(jù)結(jié)構(gòu)即為線性結(jié)構(gòu)。①有且僅有一個根結(jié)點;②除第一個結(jié)點外,每一個結(jié)點最多有一個前件;除最后一個結(jié)點外,每一個結(jié)點最多有一個后件。常見的線性結(jié)構(gòu)有:線性表、棧、隊列、線性鏈表等第22|92頁a1a2a5a3a4HEAD319510線性鏈表的邏輯狀態(tài)常見的非線性結(jié)構(gòu)有樹、二叉樹、圖等非線性結(jié)構(gòu):一個數(shù)據(jù)結(jié)構(gòu)不是線性結(jié)構(gòu)。第23頁1.線性表(LinearList)

線性表是由n(n≥0)個數(shù)據(jù)元素

a1,a2,…,ai,…,an組成的一個有限序列。簡單的線性表春夏秋冬復雜的線性表記錄102011001

張三男…

記錄202011003李四女…記錄3記錄4第24頁線性表的順序存儲結(jié)構(gòu)特點:

順序存儲結(jié)構(gòu)把邏輯上相鄰的數(shù)據(jù)元素存儲在物理上相鄰的存儲單元里,順序存儲結(jié)構(gòu)只存儲結(jié)點的值,不存儲結(jié)點間的關(guān)系,結(jié)點間的關(guān)系由存儲單元的鄰接關(guān)系來體現(xiàn)?!璦1a2…ai…an…存儲地址200020042000+4*(i-1)2000+4*(n-1)……占4個字節(jié)Loa(ai)=Loa(a1)+L*(i-1)第i個數(shù)的地址第一個數(shù)的地址L為該類型數(shù)所占的字節(jié)線性表的存儲結(jié)構(gòu)線性表的存儲結(jié)構(gòu)有兩種:

順序存儲結(jié)構(gòu)

鏈式存儲結(jié)構(gòu)第25頁

順序表的插入運算順序表的刪除運算順序表的插入和刪除運算

在線性表順序存儲情況下,要插入或刪除一個元素,都會由于數(shù)據(jù)元素的移動而消耗大量的處理時間,所以這種存儲方式對于小線性表或其中數(shù)據(jù)元素不經(jīng)常變動的線性表是合適的。線性表的順序存儲結(jié)構(gòu)稱為順序表。第26頁插入運算ai-1…..a2a1alength…ai+1aixai-1…..a2a1alength…ai+1aiX

插入算法的分析:

假設(shè)線性表中含有n個數(shù)據(jù)元素,在進行插入操作時,若假定在n+1個位置上插入元素的可能性均等,則平均移動元素的個數(shù)為:第27頁

刪除運算ai-1…..a2a1alength…ai+1aiai-1…..a2a1alength…ai+1刪除算法的分析:

在進行刪除操作時,若假定刪除每個元素的可能性均等,則平均移動元素的個數(shù)為:總結(jié):

順序存儲結(jié)構(gòu)表示的線性表,在做插入或刪除操作時,平均需要移動大約一半的數(shù)據(jù)元素。當線性表的數(shù)據(jù)元素量較大,并且經(jīng)常要對其做插入或刪除操作時,這一點需要值得考慮。第28頁線性表的鏈式存儲結(jié)構(gòu)

線性表的鏈式存儲結(jié)構(gòu)稱為線性鏈表。鏈式存儲結(jié)構(gòu)不要求邏輯上相鄰的數(shù)據(jù)元素物理位置也相鄰,而且各數(shù)據(jù)元素的存儲順序也是任意的。各數(shù)據(jù)元素的先后關(guān)系是由各結(jié)點的指針域指示。鏈式存儲結(jié)構(gòu)的每一個存儲結(jié)點不僅存儲結(jié)點的值,而且存儲結(jié)點之間的關(guān)系:鏈式存儲結(jié)構(gòu)分為單鏈表、雙向鏈表、循環(huán)鏈表線性鏈表不能隨機存取數(shù)據(jù)域指針域第29頁設(shè)線性表為(a1,a2,a3,a4,a5)1a2923a1145a4106789a3510a50HEAD3a1a2a5a3a4HEAD319510線性鏈表的邏輯狀態(tài)線性鏈表的物理狀態(tài)1a12a23a34a45a567線性表的順序存儲結(jié)構(gòu)注意:123此類編號不代表所在的地址單元的地址編碼線性表的鏈式存儲結(jié)構(gòu)

及其插入與刪除操作第30頁zhaoqiansunlizhouwuzhengwang/H存儲地址數(shù)據(jù)17131925313743liqiansunwangwuzhaozhengzhou指針43131null377192531頭指針單鏈表第31頁單鏈表的插入運算在P所指向的結(jié)點之后插入新的結(jié)點單鏈表刪除運算PbaxSbaPLa…aian^…ai-1ai+1要求:刪除結(jié)點ai。第32頁循環(huán)鏈表:

首尾相接的鏈表。將最后一個結(jié)點的空指針改為指向頭結(jié)點,從任一結(jié)點出發(fā)均可找到其它結(jié)點。a1a2an∧a3L…..帶頭結(jié)點的單鏈表a1a2ana3L…..循環(huán)單鏈表特點:

可以從任何一個結(jié)點開始訪問鏈表的所有結(jié)點.第33頁雙向鏈表的存儲結(jié)構(gòu)

在每個結(jié)點中設(shè)置兩個指針,一個指向后繼,一個指向前驅(qū)??芍苯哟_定一個結(jié)點的前驅(qū)和后繼結(jié)點??商岣咝省EAD31510a2a3a4a1提問:單向鏈表的缺點是什么?提示:如何尋找結(jié)點的直接前趨。

雙向鏈表可以克服單鏈表的單向性的缺點。

在雙向鏈表的結(jié)點中有兩個指針域,其一指向直接后繼,另一指向直接前趨。雙向循環(huán)鏈表

第34頁線性表的應(yīng)用:應(yīng)用最廣的數(shù)據(jù)結(jié)構(gòu)。.高級語言中的數(shù)組;·計算機的文件系統(tǒng);·計算機的目錄系統(tǒng);·電話號碼查詢系統(tǒng)(可采用順序表或單鏈表結(jié)構(gòu));·各種事務(wù)處理(可采用順序表或單鏈表結(jié)構(gòu));第35頁2.棧和隊列棧和隊列是兩種特殊的線性表,它們是運算時要受到某些限制的線性表,故也稱為限定性的數(shù)據(jù)結(jié)構(gòu)。

棧(Stack)及其基本運算

隊列(Queue)及其基本運算

循環(huán)隊列及其基本運算第36頁1.棧?!且环N只允許在表的一端進行插入或刪除操作的線性表。棧頂top——允許插入或刪除一端。棧底bottom——不允許插入或刪除一端。空?!缓氐目毡怼!璦1a2an棧底棧頂進棧出棧棧s=(a1,a2,…,an)后進先出或先進后出(LIFO)第37頁棧的物理存儲結(jié)構(gòu)可以用順序結(jié)構(gòu),也可以用鏈表結(jié)構(gòu)。下面討論順序存儲結(jié)構(gòu)中棧元素的插入和刪除運算。順序棧的進棧和出棧運算棧的基本運算有三種:入棧、退棧和讀棧頂元素

在順序棧中插入和刪除運算不需要移動表中其他數(shù)據(jù)元素。第38頁2.棧的順序存儲結(jié)構(gòu)及其基本運算a2a1a1a2top

用順序存儲結(jié)構(gòu)表示的棧:

順序棧用一組連續(xù)的存儲單元存放自棧底到棧頂?shù)臄?shù)據(jù)元素,一般用一維數(shù)組表示,設(shè)置一個簡單變量top指示棧頂位置,稱為針棧頂指,它始終指向待插入元素的位置。基本運算:壓(進)棧:PUSH出棧:POP讀棧頂元素:gettop第39頁例子:topbaseEDCBAtopbaseCBAbasetopAbasetop空桟:top=base非空桟:top始終在桟頂元素的后一個位置桟的元素個數(shù):top-base上溢下溢第40頁2、隊列定義:一種特殊的線性結(jié)構(gòu),限定只能在表的一端(隊尾rear)進行插入,在表的另一端(隊頭front)進行刪除的線性表。此種結(jié)構(gòu)稱為先進先出(FIFO)表。a1,

a2,

a3,

a4,…………

an-1,

an

隊列示意圖隊頭隊尾先進先出后進后出(LIFO)第41頁e3e4(c)e1,e2出隊,e4入隊

隊滿rear=3fronte1e2e3

(b)rearfront(b)e1,e2,e3入隊隊列的順序存儲結(jié)構(gòu)及其基本運算

3210(a)rear=front=-1(隊空)rearfront空隊列:非空隊列:隊列元素個數(shù):rear=front=-1front始終指向隊頭元素前一個位置,而rear始終指向隊尾元素的位置rear-front第42頁

隊列的物理存儲結(jié)構(gòu)可以用順序結(jié)構(gòu),也可以用鏈式結(jié)構(gòu)。順序隊列的運算棧有三種操作:入棧\出棧\讀棧頂元素隊列有三種操作:入隊\出隊\讀隊首元素例:有入棧元素序列:ABCD,求可能的出棧序列.如是隊列又是什么情況呢?第43頁

循環(huán)隊列把隊列的存儲空間在邏輯上看作一個環(huán),當R指向存儲空間的末端后,就把它重新置于始端。循環(huán)隊列的運算隊列中進行插入的一端稱做隊尾(rear),進行刪除的一端稱做隊首(front)。

第44頁……frontrearMaxsize-101e3e4

rear=3front第45頁0012345frontABCDEFrear上溢0012345frontrear下溢front=rear隊滿front=rear隊空第46頁數(shù)據(jù)存儲結(jié)構(gòu)方面的考題

1:數(shù)據(jù)的存儲結(jié)構(gòu)是指()

A)存儲在外存中的數(shù)據(jù)B)數(shù)據(jù)所占的存儲空間量

C)數(shù)據(jù)在計算機中的順序存儲方式D)數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機中的表示2.下列敘述中正確的是(

A)棧是“先進先出”的線性表

B)隊列是“先進后出”的線性表

C)循環(huán)隊列是非線性結(jié)構(gòu)

D)有序線性表既可以采用順序存儲結(jié)構(gòu),也可以采用鏈式存儲結(jié)構(gòu)3.數(shù)據(jù)結(jié)構(gòu)分為線性結(jié)構(gòu)和非線性結(jié)構(gòu),帶鏈的隊列屬于(

)。4.下列數(shù)據(jù)結(jié)構(gòu)中,屬于非線性結(jié)構(gòu)的是(

)A)循環(huán)隊列B)帶鏈隊列C)二叉樹D)帶鏈棧答案:D。答案:D。答案:線性結(jié)構(gòu)。答案:c第47頁5。下列敘述中正確的是()。

A)順序存儲結(jié)構(gòu)的存儲一定是連續(xù)的,鏈式存儲結(jié)構(gòu)的存儲空間不一定是連續(xù)的

B)順序存儲結(jié)構(gòu)只針對線性結(jié)構(gòu),鏈式存儲結(jié)構(gòu)只針對非線性結(jié)構(gòu)

C)順序存儲結(jié)構(gòu)能存儲有序表,鏈式存儲結(jié)構(gòu)不能存儲有序表

D)鏈式存儲結(jié)構(gòu)比順序存儲結(jié)構(gòu)節(jié)省存儲空間答案:A。6。下列關(guān)于棧的敘述正確的是(

A)棧按“先進先出”組織數(shù)據(jù)B)棧按“先進后出”組織數(shù)據(jù)

C)只能在棧底插入數(shù)據(jù)D)不能刪除數(shù)據(jù)

答案:B。7.一個隊列的初始狀態(tài)為空?,F(xiàn)將元素A,B,C,D,E,F(xiàn),5,4,3,2,1依次入隊,然后再依次退隊,則元素退隊的順序為(

。答案:A,B,C,D,E,F(xiàn),5,4,3,2,1第48頁9.設(shè)某循環(huán)隊列的容量為50,如果頭指針front=45(指向隊頭元素的前一位置),尾指針rear=10(指向隊尾元素),則該循環(huán)隊列中共有【2】個元素。

(2010年3月)

8。假設(shè)用一個長度為50的數(shù)組(數(shù)組元索的下標從0到49)作為棧的存儲空間,棧底指針bottom指向棧底元素,棧頂指針top指向棧頂元素,如果bottom=49,top=30(數(shù)組下標),則棧中具有【】個元素。答案:19答案:1546-50-1-10鏈表不具有的特點是A)不必事先估計存儲空間B)可隨機訪問任一元素C)插入刪除不需要移動元素 D)所需空間與線性表長度成正比數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)與存儲結(jié)構(gòu),線性鏈表屬于【1】

。數(shù)據(jù)結(jié)構(gòu)中,與所使用的計算機無關(guān)的是數(shù)據(jù)的

A)存儲結(jié)構(gòu) B)物理結(jié)構(gòu)

C)邏輯結(jié)構(gòu) D)物理和存儲結(jié)構(gòu)數(shù)據(jù)的邏輯結(jié)構(gòu)有線性結(jié)構(gòu)和【1】

兩大類。數(shù)據(jù)的存儲結(jié)構(gòu)是指A)數(shù)據(jù)所占的存儲空間B)數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機中的表示C)數(shù)據(jù)在計算機中的順序存儲方式D)存儲在外存中的數(shù)據(jù)例題講解存儲結(jié)構(gòu)非線性結(jié)構(gòu)順序存儲方法是把邏輯上相鄰的結(jié)點存儲在物理位置

【2】的存儲單元中。

數(shù)據(jù)處理的最小單位是

A)數(shù)據(jù) B)數(shù)據(jù)元素C)數(shù)據(jù)項 D)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)作為計算機的一門學科,主要研究數(shù)據(jù)的邏輯結(jié)構(gòu)、對各種數(shù)據(jù)結(jié)構(gòu)進行的運算,以及

A)數(shù)據(jù)的存儲結(jié)構(gòu) B)計算方法C)數(shù)據(jù)映象D)邏輯存儲線性表的順序存儲結(jié)構(gòu)和線性表的鏈式存儲結(jié)構(gòu)分別是

A)順序存取的存儲結(jié)構(gòu)、順序存取的存儲結(jié)構(gòu)

B)隨機存取的存儲結(jié)構(gòu)、順序存取的存儲結(jié)構(gòu)

C)隨機存取的存儲結(jié)構(gòu)、隨機存取的存儲結(jié)構(gòu)

D)任意存取的存儲結(jié)構(gòu)、任意存取的存儲結(jié)構(gòu)

相鄰根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間前后件關(guān)系的復雜程度,一般將數(shù)據(jù)結(jié)構(gòu)分成

A)動態(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)數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的

【2】以及對數(shù)據(jù)的操作運算。數(shù)據(jù)的基本單位是

【5】。下列敘述中,錯誤的是

A)數(shù)據(jù)的存儲結(jié)構(gòu)與數(shù)據(jù)處理的效率密切相關(guān)

B)數(shù)據(jù)的存儲結(jié)構(gòu)與數(shù)據(jù)處理的效率無關(guān)

C)數(shù)據(jù)的存儲結(jié)構(gòu)在計算機中所占的空間不一定是連續(xù)的

D)一種數(shù)據(jù)的邏輯結(jié)構(gòu)可以有多種存儲結(jié)構(gòu)存儲結(jié)構(gòu)數(shù)據(jù)元素鏈表不具有的特點是A)不必事先估計存儲空間B)可隨機訪問任一元素C)插入刪除不需要移動元素 D)所需空間與線性表長度成正比順序存儲方法是把邏輯上相鄰的結(jié)點存儲在物理位置

【2】的存儲單元中。長度為n的順序存儲線性表中,當在任何位置上插入一個元素概率都相等時,插入一個元素所需移動元素的平均個數(shù)為【1】

。線性表若采用順序存儲結(jié)構(gòu)時,要求內(nèi)存中可用存儲單元的地址

A)必須是連續(xù)的 B)部分地址必須是連續(xù)的

C)一定是不連續(xù)的D)連續(xù)不連續(xù)都可以例題講解相鄰線性表L=(a1,a2,a3,…ai,…an),下列說法正確的是

A)每個元素都有一個直接前件和直接后件

B)線性表中至少要有一個元素

C)表中諸元素的排列順序必須是由小到大或由大到小

D)除第一個元素和最后一個元素外,其余每個元素都有一個且只有一個直接前件和直接后件線性表的順序存儲結(jié)構(gòu)和線性表的鏈式存儲結(jié)構(gòu)分別是

A)順序存取的存儲結(jié)構(gòu)、順序存取的存儲結(jié)構(gòu)

B)隨機存取的存儲結(jié)構(gòu)、順序存取的存儲結(jié)構(gòu)

C)隨機存取的存儲結(jié)構(gòu)、隨機存取的存儲結(jié)構(gòu)

D)任意存取的存儲結(jié)構(gòu)、任意存取的存儲結(jié)構(gòu)下列敘述中,錯誤的是

A)數(shù)據(jù)的存儲結(jié)構(gòu)與數(shù)據(jù)處理的效率密切相關(guān)

B)數(shù)據(jù)的存儲結(jié)構(gòu)與數(shù)據(jù)處理的效率無關(guān)

C)數(shù)據(jù)的存儲結(jié)構(gòu)在計算機中所占的空間不一定是連續(xù)的

D)一種數(shù)據(jù)的邏輯結(jié)構(gòu)可以有多種存儲結(jié)構(gòu)

根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間前后件關(guān)系的復雜程度,一般將數(shù)據(jù)結(jié)構(gòu)分成

A)動態(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)當線性表采用順序存儲結(jié)構(gòu)實現(xiàn)存儲時,其主要特點是【1】

。隨機存取鏈表不具有的特點是A)不必事先估計存儲空間B)可隨機訪問任一元素C)插入刪除不需要移動元素D)所需空間與線性表長度成正比用鏈表表示線性表的優(yōu)點是A)便于隨機存取B)花費的存儲空間較順序存儲少C)便于插入和刪除操作D)數(shù)據(jù)元素的物理順序與邏輯順序相同長度為n的順序存儲線性表中,當在任何位置上插入一個元素概率都相等時,插入一個元素所需移動元素的平均個數(shù)為【1】

。在單鏈表中,增加頭結(jié)點的目的是

A)方便運算的實現(xiàn)B)使單鏈表至少有一個結(jié)點

C)標識表結(jié)點中首結(jié)點的位置

D)說明單鏈表是線性表的鏈式存儲實現(xiàn)例題講解非空的循環(huán)單鏈表head的尾結(jié)點(由p所指向),滿足

A)p->next==NULL B)p==NULLC)p->next=head D)p=head循環(huán)鏈表的主要優(yōu)點是

A)不再需要頭指針了

B)從表中任一結(jié)點出發(fā)都能訪問到整個鏈表

C)在進行插入、刪除運算時,能更好的保證鏈表不斷開

D)已知某個結(jié)點的位置后,能夠容易的找到它的直接前件當循環(huán)隊列非空且隊尾指針等于隊頭指針時,說明循環(huán)隊列已滿,不能進行入隊運算。這種情況稱為【2】。用鏈表表示線性表的突出優(yōu)點是【1】。上溢插入、刪除靈活棧和隊列的共同特點是

A)都是先進先出B)都是先進后出

C)只允許在端點處插入和刪除元素D)沒有共同點如果進棧序列為e1,e2,e3,e4,則可能的出棧序列是

A)e3,e1,e4,e2 B)e2,e4,e3,e1C)e3,e4,e1,e2 D)任意順序一些重要的程序語言(如C語言和Pascal語言)允許過程的遞歸調(diào)用。而實現(xiàn)遞歸調(diào)用中的存儲分配通常用

A)棧 B)堆C)數(shù)組 D)鏈表例題講解棧底至棧頂依次存放元素A、B、C、D,在第五個元素E入棧前,棧中元素可以出棧,則出棧序列可能是

A)ABCED B)DCBEAC)DBCEA D)CDABE棧通常采用的兩種存儲結(jié)構(gòu)是

A)線性存儲結(jié)構(gòu)和鏈表存儲結(jié)構(gòu) B)散列方式和索引方式

C)鏈表存儲結(jié)構(gòu)和數(shù)組D)線性存儲結(jié)構(gòu)和非線性存儲結(jié)構(gòu)棧和隊列通常采用的存儲結(jié)構(gòu)是【1】

。下列數(shù)據(jù)結(jié)構(gòu)中,按先進后出原則組織數(shù)據(jù)的是

A)線性鏈表B)棧C)循環(huán)鏈表 D)順序表▽當循環(huán)隊列非空且隊尾指針等于隊頭指針時,說明循環(huán)隊列已滿,不能進行入隊運算。這種情況稱為

【2】。鏈表存儲結(jié)構(gòu)和數(shù)組上溢由兩個棧共享一個存儲空間的好處是A)減少存取時間,降低下溢發(fā)生的機率B)節(jié)省存儲空間,降低上溢發(fā)生的機率C)減少存取時間,降低上溢發(fā)生的機率D)節(jié)省存儲空間,降低下溢發(fā)生的機率下列關(guān)于棧的敘述中正確的是A)在棧中只能插入數(shù)據(jù)B)在棧中只能刪除數(shù)據(jù)C)棧是先進先出的線性表D)棧是后進先出的線性表下列關(guān)于隊列的敘述中正確的是A)在隊列中只能插入數(shù)據(jù)B)在隊列中只能刪除數(shù)據(jù)C)隊列是先進先出的線性表D)隊列是后進先出的線性表第60頁樹型結(jié)構(gòu)是一種重要的非線性結(jié)構(gòu)。

樹的概念

二叉樹的概念

二叉樹的存儲

二叉樹的遍歷3.樹與二叉樹第61頁樹的概念

樹的定義:是一種簡單的非線性結(jié)構(gòu)。n個結(jié)點的有限集。(n>=0)

ABDFECGHIJKM結(jié)點:根結(jié)點:沒有前件的結(jié)點只有一個稱為根結(jié)點。簡稱樹的根。空樹:無結(jié)點則稱為空樹;

父結(jié)點:結(jié)點的前件稱該結(jié)點的父結(jié)點。A只有一個結(jié)點的樹第62頁樹型結(jié)構(gòu)的常用術(shù)語ABDFECGHIJKM子結(jié)點:結(jié)點的后件,稱為該結(jié)點的子結(jié)點??梢杂卸鄠€。葉子結(jié)點沒有后件的結(jié)點;

Q:圖中葉子結(jié)點有幾個?7結(jié)點的度一個結(jié)點的子樹的個數(shù);(有幾個分叉)Q:結(jié)點A、G的度數(shù)?3,2.Q:度數(shù)為0、1、2、3的結(jié)點分別有幾個?

樹的度樹中所有結(jié)點度的最大值;Q:右圖中樹的度?3第63頁樹型結(jié)構(gòu)的常用術(shù)語ABDFECGHIJKM

結(jié)點的層次樹中根結(jié)點的層次為1,根結(jié)點子樹的根為第2層,以此類推;

Q:圖中結(jié)點F的層次?

樹的深度

樹中所有結(jié)點層次的最大值;

Q:圖中樹的深度?

有序樹、無序樹如果樹中每棵子樹從左向右的排列擁有一定的順序,不得互換,則稱為有序樹,否則稱為無序樹。①②③④第64頁二叉樹的概念

定義:二叉樹是一種有序的樹形結(jié)構(gòu)。它與一般樹形結(jié)構(gòu)的區(qū)別是:每個結(jié)點最多有兩棵子樹;子樹有左右之分,次序不能任意顛倒。稱左子樹和右子樹

二叉樹的5種基本形態(tài)第65頁★樹與二叉樹的區(qū)別A.樹和二叉樹的結(jié)點個數(shù)最少都可為0。B.樹中結(jié)點的最大度數(shù)沒有限制,二叉樹結(jié)點最大度數(shù)為2。C.樹的結(jié)點無左、右之分,二叉樹的結(jié)點子樹有明確的左、右之分。3個結(jié)點的樹3個結(jié)點的二叉樹第66頁二叉樹的性質(zhì)【性質(zhì)1】

在二叉樹的第k層上最多有2k-1個結(jié)點(k≥1)ABCDFEHG121314158910114567123第67頁【性質(zhì)2】深度為m的二叉樹最多有2m-1個結(jié)點(m≥1)ABCDFEHG121314158910114567123第68頁【性質(zhì)3】二叉樹上葉子結(jié)點數(shù)比度為2的結(jié)點數(shù)多1ABCDFEHG度為2的結(jié)點葉子結(jié)點第69頁【性質(zhì)4】具有n個結(jié)點的二叉樹的深度最少為

log2n

+1),其中,log2n

的結(jié)果是不大于log2n的最大整數(shù)121314158910114567123深度為4的滿二叉樹深度為4的完全二叉樹84567123深度為3的完全二叉樹具有4~7個結(jié)點深度為4的完全二叉樹具有8~15深度為5的完全二叉樹具有15~31log2(8+1)=ln9/In2=4log2(15+1)=In16/In2=4深度為6的完全二叉樹具有32~63深度為7的完全二叉樹具有64~127深度為8的完全二叉樹具有128~255深度為9的完全二叉樹具有256~511深度為10的完全二叉樹具有512~1023深度為11的完全二叉樹具有1024~2047第70頁滿二叉樹和完全二叉樹滿二叉樹:除最后一層外,每一層上的所有結(jié)點都有兩個子結(jié)點。最后一層的結(jié)點均為0度。完全二叉樹:除最后一層外,每一層上的結(jié)點數(shù)均達到最大值,在最后一層上只缺少右邊的若干結(jié)點。則稱這棵二叉樹為完全二叉樹。完全二叉樹中度數(shù)為1的結(jié)點的個數(shù)為0或1。第71頁121314158910114567123滿二叉樹完全二叉樹12138910114567123

完全二叉樹是滿二叉樹滿二叉樹也是完全二叉樹第72頁1213891011456123非完全二叉樹深度為4的完全二叉樹84567123第73頁性質(zhì)5:如果對一棵有n個結(jié)點的完全二叉樹的結(jié)點按層序編號,則對任一結(jié)點i(1=<i=<n)有:

(1)如果i=1,則結(jié)點i是二叉樹的根,無雙親;

如果i>1,則雙親Parent(i)是結(jié)點|i/2|。

(2)如果2i<=n,則編號i的左子結(jié)點為2i,否則無左子結(jié)點,顯然也就沒有右子結(jié)點。

(3)如果2i+1<=n,則編號i的右子結(jié)點2i+1,否則該結(jié)點無右子結(jié)點。

總之:如

i>1它的雙親是i/2取整,左子結(jié)點是2*i,右子結(jié)點是2*i+1.當然如果算下來超過總數(shù)民N,則為沒有。第74頁例:112345678910121i=6其雙親為|i/2|=3;其左子結(jié)點為2*i=12;i=1是樹的根,無雙親;其左子結(jié)點為2*i=2,右子結(jié)點為2*i+1=3.∵2*i=18>122*i+1=19>12∴其無左、右子結(jié)點?!?*i+1=13>12∴其無右子結(jié)點。i=9其雙親為|i/2|=

4

;第75頁1:在深度為7的滿二叉樹中,葉子結(jié)點的個數(shù)為

A)32

B)31

C)64

D)632:在深度為7的滿二叉樹中,度為2的結(jié)點個數(shù)為【】

。3:一棵二叉樹中共有70個葉子結(jié)點與80個度為1的結(jié)點,則該二叉樹中的總結(jié)點數(shù)為

A)219B)221C)229D)2314:某二叉樹中度為2的結(jié)點有18個,則該二叉樹中有【】個葉子結(jié)點。5:一棵二叉樹第六層(根結(jié)點為第一層)的結(jié)點數(shù)最多為【】個。(樹型結(jié)構(gòu)方面的考題

1答案:C。3答案:A。5答案:32。2答案:63。4答案:19。第76頁二叉樹的存儲

在計算機中,二叉樹通常采用鏈式存儲結(jié)構(gòu)。對于滿二叉樹和完全二叉樹可以按層進行順序存儲。LlinkinfoRlink二叉樹的存儲結(jié)點的結(jié)構(gòu)ABDCFGEA∧G∧∧E∧∧F∧B∧C∧

Dt第77頁2、二叉樹的存儲結(jié)構(gòu)

(2)鏈式存儲結(jié)構(gòu)T[16]若父結(jié)點在數(shù)組中i下標處,其左孩子在2*i處,右孩子在2*i+1處。11ABcFED

●●●●●●●●●124

8

910563712131415(1)順序存儲結(jié)構(gòu)(1)順序存儲結(jié)構(gòu)2h-1=24-1=15用一組連續(xù)的存儲單元存放二叉樹的數(shù)據(jù)元素。結(jié)點在數(shù)組中的相對位置蘊含著結(jié)點之間的關(guān)系。0000FE000DC0BA15141312111098765432100一般二叉樹必須按完全二叉樹的形式存儲,將造成存儲的浪費。第78頁(2)鏈式存儲結(jié)構(gòu)鏈式存儲結(jié)構(gòu)二叉鏈表三叉鏈表二叉鏈表:二叉鏈表的結(jié)點包含三個域:數(shù)據(jù)域、左、右指針域。例:ABCDEFGA^B^C^D^E^F^^G^第79頁三叉鏈表:三叉鏈表的結(jié)點包含四個域:數(shù)據(jù)域、左、右、雙親指針域。例:ABCDEFGA^^B^C^D^E^F^^G^鏈式存儲結(jié)構(gòu)的特點:(1)操作便于實現(xiàn)(2)結(jié)構(gòu)復雜第80頁二叉樹的遍歷

遍歷指不重復地訪問二叉樹中的所有結(jié)點。二叉樹的遍歷的次序與樹型結(jié)構(gòu)上的大多數(shù)運算有聯(lián)系。遍歷的方式有三種(1)前序遍歷(DLR)(2)中序遍歷(LDR)(3)后序遍歷(LRD)ABCDFEHG第81頁二叉樹的遍歷

遍歷指不重復地訪問二叉樹中的所有結(jié)點。(1)先(前)序遍歷(DLR)根左右若二叉樹為空,則結(jié)束遍歷操作;否則訪問根結(jié)點;先序遍歷左子樹;先序遍歷右子樹。ABCDFEHG先序遍歷的結(jié)果:

ABECFGHD第82頁(2)中序遍歷(LDR)左根右若二叉樹為空,則結(jié)束遍歷操作;否則中序遍歷左子樹;訪問根結(jié)點;中序遍歷右子樹。中序遍歷的結(jié)果:EBAFHGCD(3)后序遍歷(LRD)右根左若二叉樹為空,則結(jié)束遍歷操作;否則后序遍歷左子樹;后序遍歷右子樹;訪問根結(jié)點。后序遍歷的結(jié)果:E

BHGFDCAABCDFEHG第83頁先序序列:ABDGCEFH 中序序列:DGBAECHF 后序序列:GDBEHFCAABCFHDEG下圖所示的二叉樹經(jīng)過三種遍歷得到的順序分別為?練習:根據(jù)先序遍歷序列,建立二叉樹第84頁1:設(shè)二叉樹如下:

對該二叉樹進行后序遍歷的結(jié)果為【3】

樹型結(jié)構(gòu)方面的考題22:對如下二叉樹進行后序遍歷的結(jié)果為A)ABCDEF

B)DBEAFCC)ABDECF

D)DEBFCA

EDBGHFCA

DABCFHDGE已知二叉樹后序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷序列是

A)acbedB)decabC)deabc D)cedba

已知一棵二叉樹前序遍歷和中序遍歷分別為ABDEGCFH和DBGEACHF,則該二叉樹的后序遍歷為

A)GEDHFBCA B)DGEBHFCAC)ABCDEFGH D)ACBFEDHG樹是結(jié)點的集合,它的根結(jié)點數(shù)目是

A)有且只有1 B)1或多于1C)0或1 D)至少2下列敘述中正確的是

A)線性表是線性結(jié)構(gòu) B)棧與隊列是非線性結(jié)構(gòu)

C)線性鏈表是非線性結(jié)構(gòu) D)二叉樹是線性結(jié)構(gòu)例題講解在深度為5的滿二叉樹中,葉子結(jié)點的個數(shù)為

A)32 B)31C)16 D)15若某二叉樹的前序遍歷訪問順序是abdgcefh,中序遍歷訪問順序是dgbaechf,則其后序遍歷的結(jié)點訪問順序是

A)bdgcefhaB)gdbecfhaC)bdgaechfD)gdbehfca在樹結(jié)構(gòu)中,樹根結(jié)點沒有【1】。具有3個結(jié)點的二叉樹有

A)2種形態(tài)B)4種形態(tài)C)7種形態(tài)D)5種形態(tài)設(shè)一棵二叉樹中有3個葉子結(jié)點,有8個度為1的結(jié)點,則該二叉樹中總的結(jié)點數(shù)為

A)12 B)13C)14 D)15雙親結(jié)點設(shè)有下列二叉樹:

對此二叉樹前序遍歷的結(jié)果為A)ZBTTCPXAB)ATBZXCTPC)ZBTACTXPD)ATBZXCPT設(shè)有下列二叉樹:對此二叉樹的中序遍歷的結(jié)果為A)ABCDEFB)DBEAFCC)ABDECFD)DEBFCA設(shè)樹T的度為4,其中度為1、2、3、4的結(jié)點個數(shù)分別為4、2、1、1。則T中的葉子結(jié)點數(shù)為A)8B)7C)6D)5設(shè)一棵完全二叉樹共有700個結(jié)點,則該二叉樹中有()個葉子結(jié)點。

在一個容量為15的循環(huán)隊列中,若頭指針front=6,尾指針rear=9,則該循環(huán)隊列中共有()個元素。設(shè)一棵二叉樹的中序遍歷結(jié)果為DBEAFC,前序遍歷結(jié)果為ABDECF,則后序遍歷結(jié)果為()。3503DEBFCA第89頁⒌查找技術(shù)

查找是數(shù)據(jù)處理的重要內(nèi)容。查找指在一個給定的數(shù)據(jù)結(jié)構(gòu)中查找指定的元素,該元素也稱關(guān)鍵字。若找到了滿足條件的結(jié)點,稱查找成功;否則稱查找失敗。衡量一個查找算法的主要標準是查找過程中對關(guān)鍵字進行的平均比較次數(shù)。通常根據(jù)不同的數(shù)據(jù)結(jié)構(gòu),采用不同的查找方法:

順序查找

二分查找第90頁1.7.1.1順序查找(線性查找)◆查找過程:對給定的一關(guān)鍵字K,從線性表的一端開始,逐個進行記錄的關(guān)鍵字和K的比較,直到找到關(guān)鍵字等于K的記錄或到達表的另一端?!艨梢圆捎脧那跋蚝蟛椋部刹捎脧暮笙蚯安榈姆椒?。◆在平均情況下,大約要與表中一半以上元素進行比較,效率較低。平均查找長度較大。最好情況:1最壞情況:n◆在下面兩種情況下只能采取順序查找:

a.線性表為無序表(元素排列是無序的);

b.即使是有序線性表,但采用的是鏈式存儲結(jié)構(gòu)。第91頁1.7.1.2折半查找(二分法查找)思想:先確定待查找記錄所在的范圍,然后逐步縮小范圍,直到找到或確認找不到該記錄為止。前提:必須在具有順序存儲結(jié)構(gòu)的有序表中進行。分三種情況:

1)若中間項的值等于x,則說明已查到。

2)若x小于中間項的值,則在線性表的前半部分查找;

3)若x大于中間項的值,則在線性表的后半部分查找。特點:比順序查找方法效率高。最壞的情況下,需要比較log2n次。第92|92頁折半查找算法舉例對給定數(shù)列(有序){3,5,11,17,21,23,28,30,32,50},按折半查找算法,查找關(guān)鍵字值為30的數(shù)據(jù)元素。

a1

a2

a3

a4

a5

a6

a7

a8

a9

a10

第1次:{3,5,11,17,21,23,28,30,32,50}

K=30mid1=(1+10)/2=5

k>a(mid1)=a(5)=21

第2次:{23,28,30,32,50}mid2=(6+10)/2=8K=a(mid2)=a(8)=30lowhighmidlowhighmid第93|92頁練習

假設(shè)待查有序(升序)順序表中數(shù)據(jù)元素的關(guān)鍵字序列為(8,18,27,42,47,50,56,68,95,120),用折半查找方法查找關(guān)鍵字值為27的數(shù)據(jù)元素.對于長度為n的有序線性表,最壞情況只需比較log2n次。

第94頁1.7.2排序1.7.2.1概述

1、排序的功能:

將一個數(shù)據(jù)元素(或記錄)的任意序列,重新排成一個按關(guān)鍵字有序的序列。

2、排序過程的組成步驟:首先比較兩個關(guān)鍵字的大?。蝗缓髮⒂涗洀囊粋€位置移動到另一個位置。第95頁排序方法插入排序選擇排序交換排序歸并排序簡單插入排序希爾排序簡單選擇排序堆排序起泡排序快速排序第96頁1.7.2.2插入排序

簡單插入、希爾排序1、簡單插入排序:

基本思想:從數(shù)組的第2號元素開始,順序從數(shù)組中取出元素,并將該元素插入到其左端已排好序的數(shù)組的適當位置上。第97頁該算法適合于n較小的情況,時間復雜度為O(n2).待排元素序列:[53]2736156942第一次排序:[2753]36156942第二次排序:[273653]156942第三次排序:[15273653]6942第四次排序:[1527365369]42第五次排序:[152736425369]

直接插入排序示例對于有n個數(shù)據(jù)元素的待排序列,插入操作要進行n-1趟最壞情況下:需要n(n-1)/2次比較最好:

n-1次比較第98頁希爾排序:希爾排序的基本思想:

先將整個待排記錄序列分割成為若干子序列分別進行直接插入排序,待整個序列中的記錄“基本有序”時,再對全體記錄進行一次直接插入排序.最壞情況下:需要O(n1.5)次比較第99頁

1、簡單選擇排序思想:首先從1~n個元素中選出關(guān)鍵字最小的記錄交換到第一個位置上。然后再從第2個到第n個元素中選出次小的記錄交換到第二個位置上,依次類推。1.7.2.3選擇排序

簡單選擇排序、堆排序簡單選擇排序法,

最壞情況需要n(n-1)/2次比較;

時間復雜度為O(n2),適用于待排序元素較少的情況。第100|92頁初態(tài):[15,14,22,30,37,15,11]第一趟:[11][14,22,30,37,15,15]第二趟:[11,14][22,30,37,15,15]第三趟:[11,14,15][30,37,22,15]第四趟:[11,14,15,15][37,22,30]第五趟:[11,14,15,15,22][37,30]第六趟:[11,14,15,15,22,30][37]

有序序列例:設(shè)待排數(shù)據(jù)元素的關(guān)鍵字為(15,14,22,30,37,11),每一趟排序后的序列狀態(tài)如圖所示:第101頁

2、堆排序(也是一種選擇排序)堆是具有特定條件的順序存儲的完全二叉樹,其特定條件是:任何一個非葉子結(jié)點的關(guān)鍵字大于等于(或小于等于)子女的關(guān)鍵字的值。897624331510112536497856(a):堆頂元素取最大值(b):堆頂元素取最小值堆排序需要比較的次數(shù)為O(nlog2n)

(1)堆的示例

第102頁1.7.2.4交換排序交換排序的特點在于交換。有冒泡和快速排序兩種。1、冒泡排序(起泡排序)思想:小的浮起,大的沉底。從左端開始比較。第一趟:第1個與第2個比較,大則交換;第2個與第3個比較,大則交換,……關(guān)鍵字最大的記錄交換到最后一個位置上;第二趟:對前n-1個記錄進行同樣的操作,關(guān)鍵字次大的記錄交換到第n-1個位置上;依次類推,則完成排序。第103頁冒泡排序

冒泡排序的方法:掃描整個線性表,逐次對相鄰的兩個元素進行比較,若為逆序,則交換;第一趟掃描的結(jié)果使最大(或最小)的元素排到表的最后(或最前)

;除最后(或最前)一個元素,對剩余的元素重復上述過程,將次大(或次小)的數(shù)排到表的倒數(shù)(或正數(shù))第二個位置;重復上述過程;對于長度為n的線性表,冒泡排序需要對表掃描n-1遍。

第104頁冒泡排序的方法設(shè)待排數(shù)據(jù)元素的關(guān)鍵字為(18,20,15,32,4,25),第一趟冒泡排序后的序列狀態(tài)如圖所示:

182015324251820153242518152032425181520324251815204322518152042532最大數(shù)第二趟冒泡排序第105頁Q:第二趟冒泡排序后的結(jié)果是什么樣的?達到了最終的排序目標嗎?一共需要多少次能夠最后成為有序序列?Q:你覺得冒泡排序的效率如何?如果是你,你會用什么方法來排序?

冒泡排序比較簡單,當初始序列基本有序時,冒泡排序有較高的效率,反之效率較低。冒泡排序終止條件:

本趟排序未發(fā)生交換,終止排序算法第106頁初始第一趟第二趟第三趟第四趟第五趟序列排序后排序后排序后排序后排序后 26 18 18

18

189 18 26 26

26 915 32 32

329 15 18 54 47 915 26 47 9 1532

9 15 47

15 54

設(shè)待排數(shù)據(jù)元素的關(guān)鍵字為(26,18,32,54,47,9,15)冒泡排序法,需要比較的次數(shù)為n(n-1)/2;

第107頁2、快速排序(對冒泡排序的改進)思想:通過一趟排序?qū)⒋判蛄蟹殖蓛刹糠?,使其中一部分記錄的關(guān)鍵字均比另一部分小,再分別對這兩部分排序,以達到整個序列有序。時間復雜度:O(log2n)當待排序列逆序時,蛻變成冒泡排序,時間復雜度:O(n(n-1)/2)第108頁1.7.2.5內(nèi)部排序方法的選擇各種排序方法各有優(yōu)缺點,故在不同情況下可作不同的選擇。通常需考慮的因素有:待排序的記錄個數(shù);記錄本身的大小;記錄的鍵值分布情況等。若待排序的記錄個數(shù)n較小時,可采用簡單排序方法。若n較大時,應(yīng)采用快速排序或堆排序。若待排序的記錄已基本有序,可采用簡單插入和起泡排序。第109頁方法歸并排序簡單插入希爾排序簡單選擇堆排序起泡排序快速排序插入選擇交換比較次數(shù)使用建議查找:方法順序折半比較次數(shù)log2n最好:1最壞:n平均:(n+1)/2使用條件順序存儲結(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大的表,但逆序的表會蛻變?yōu)槠鹋菖判蚪柚o助空間最多的方法n大的表第110|92頁排序法小結(jié):簡單選擇排序法,

最壞情況需要n(n-1)/2次比較;冒泡排序法,

最壞情況需要n(n-1)/2次比較;希爾排序法,

最壞情況需要O(n1.5)次比較;堆排序法,最壞情況需要O(nlog2n)次比較;

第111|92頁排序查找方面的考題:(1)對于長度為n的線性表,在最壞情況下,下列各排序法所對應(yīng)的比較次數(shù)中正確的是()

A)冒泡排序為n/2B)冒泡排序為n

C)快速排序為nD)快速排序為n(n-1)/2

(2)在長為64的有序線性表中進行順序查找,最壞情況下需要比較的次數(shù)為______。A)63B)

64C)

6D)

7(3)下列數(shù)據(jù)結(jié)構(gòu)中,能用二分法進行查找的是(

A)順序存儲的有序線性表 B)線性鏈表

C)二叉鏈表 D)有序線性鏈表(4)下列排序方法中,最壞情況下比較次數(shù)最少的是(

A)冒泡排序

B)簡單選擇排序

C)直接插入排序

D)堆排序DBAD第112頁在長度為n的有序線性表中進行二分查找。最壞的情況下,需要的比較次數(shù)為

【2】。長度為n的順序存儲線性表中,當在任何位置上插入一個元素概率都相等時,插入一個元素所需移動元素的平均個數(shù)為【1】

。假設(shè)線性表的長度為n,則在最壞情況下,冒泡排序需要的比較次數(shù)為

A)log2n B)n2C)O(n1..5) D)n(n-1)/2已知數(shù)據(jù)表A中每個元素距其最終位置不遠,為節(jié)省時間,應(yīng)采用的算法是

A)堆排序B)直接插入排序C)快速排序D)直接選擇排序例題講解log2nn/2第113頁

冒泡排序算法在最好的情況下的元素交換次數(shù)為【1】

。在最壞情況下,堆排序需要比較的次數(shù)為

【2】。最簡單的交換排序方法是

A)快速排序 B)選擇排序C)堆排序 D)冒泡排序排序是計算機程序設(shè)計中的一種重要操作,常見的排序方法有插入排序、【1】

和選擇排序等。0nlog2n交換排序第114頁在下列幾種排序方法中,要求內(nèi)存量最大的是

A)插入排序B)選擇排序C)快速排序 D)歸并排序在待排序的元素序列基本有序的前提下,效率最高的排序方法是

A)冒泡排序B)選擇排序C)快速排序D)歸并排序

希爾排序?qū)儆?/p>

A)交換排序B)歸并排序C)選擇排序 D)插入排序?qū)﹂L度為n的線性表進行順序查找,在最壞的情況下所需要的比較次數(shù)為A)n+1B)nC)(n+1)/2D)n/2第115頁2.程序設(shè)計基礎(chǔ)第116頁第二章程序設(shè)計基礎(chǔ)內(nèi)容:

1.程序設(shè)計方法與風格。2.結(jié)構(gòu)化程序設(shè)計。3.面向?qū)ο蟮某绦蛟O(shè)計方法,對象,方法,屬性及繼承與多態(tài)性。第117頁1.源程序的文檔化符號的命名:見名知意注釋(序言性和功能性注釋)程序的視覺組織:空格、空行、縮進。。。。2.數(shù)據(jù)說明數(shù)據(jù)說明的次序應(yīng)該規(guī)范化變量安排有序化對復雜數(shù)據(jù)結(jié)構(gòu)應(yīng)注釋說明3.語句的結(jié)構(gòu)每條語句簡單明了盡量不用或少用GOTO語句盡量只采用3種基本控制結(jié)構(gòu)編程4.輸入和輸出對所有輸入數(shù)據(jù)進行校驗和合理性檢查輸入輸出格式保持一致設(shè)計良好的輸出報表清晰第一,效率第二2.1.2程序設(shè)計風格程序設(shè)計結(jié)構(gòu)化程序設(shè)計(面向過程的程序設(shè)計)面向?qū)ο蟮某绦蛟O(shè)計第118頁第119頁2.2結(jié)構(gòu)化程序設(shè)計2.2.1基本概念★基本思想

對大型的程序設(shè)計,使用一些基本的結(jié)構(gòu)來設(shè)計程序,無論多復雜的程序,都可以使用這些基本結(jié)構(gòu)按一定的順序組合起來。這些基本結(jié)構(gòu)的特點都是只有一個入口、一個出口。由這些基本結(jié)構(gòu)組成

溫馨提示

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

最新文檔

評論

0/150

提交評論