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

下載本文檔

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

文檔簡(jiǎn)介

1、二級(jí)公共基礎(chǔ)知識(shí)1第一章數(shù)據(jù)結(jié)構(gòu)與算法第二章程序設(shè)計(jì)基礎(chǔ) 第三章軟件工程基礎(chǔ)第四章數(shù)據(jù)庫(kù)設(shè)計(jì)基礎(chǔ)2第一章數(shù)據(jù)結(jié)構(gòu)與算法1.1算法1.2數(shù)據(jù)結(jié)構(gòu)的基本概念1.3線性表及其順序存儲(chǔ)結(jié)構(gòu)1.4棧和隊(duì)列1.5線性鏈表1.6樹(shù)與二叉樹(shù)1.7查找技術(shù)1.8排序技術(shù)3考試大綱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)算。6.樹(shù)

2、的基本概念;二叉樹(shù)的定義及其存儲(chǔ)結(jié)構(gòu);二叉樹(shù)的前序、中序和后序遍歷。7.順序查找與二分法查找算法;基本排序算法(交換類排序,選擇類排序,插入類排序)。41.1算法1.1.1 算法的基本概念算法:是指解題方案的準(zhǔn)確而完整的描述。 算法不等于程序,也不等于計(jì)算機(jī)方法,程序的編制不可能優(yōu)于算法的設(shè)計(jì)。1、算法的基本特征:(1)可行性;(2)確定性,算法中每一步驟都必須有明確定義,不允許有模棱兩可的解釋,不允許有多義性;(3)有窮性,算法必須能在有限的時(shí)間內(nèi)做完,取能在執(zhí)行有限個(gè)步驟后終止,包括合理的執(zhí)行時(shí)間的含義;(4)擁有足夠的情報(bào)51.1算法2、算法的基本要素:一是對(duì)數(shù)據(jù)對(duì)象的運(yùn)算和操作;二是算

3、法的控制結(jié)構(gòu)。(1)算法中對(duì)數(shù)據(jù)的運(yùn)算和操作指令系統(tǒng):一個(gè)計(jì)算機(jī)系統(tǒng)能執(zhí)行的所有指令的集合?;具\(yùn)算和操作包括:算術(shù)運(yùn)算、邏輯運(yùn)算、關(guān)系運(yùn)算、數(shù)據(jù)傳輸。61.1算法(2)算法的控制結(jié)構(gòu):一個(gè)算法的功能不僅取決于所選用的操作,而且還與各操作之間的執(zhí)行順序有關(guān)。算法中各操作之間的執(zhí)行順序稱為算法的控制結(jié)構(gòu)。描述算法的工具通常有傳統(tǒng)流程圖、NS結(jié)構(gòu)化流程圖、算法描述語(yǔ)言等。一個(gè)算法一般都可以用順序、選擇、循環(huán)三種基本控制結(jié)構(gòu)組合而成。71.1算法3、算法設(shè)計(jì)基本方法(1)列舉法:根據(jù)提出的問(wèn)題,列舉所有可能的情況,并用問(wèn)題 中給定的條件檢驗(yàn)?zāi)?些 是需要的,哪 些是不需要的。(2)歸納法:通過(guò)列舉少

4、量的特殊情況,經(jīng)過(guò)分析,最后找出一般的關(guān)系。(3)遞推:是指從已知的初始條件出發(fā),逐次推出所要求的各中間結(jié)果和最后結(jié)果。(4)遞歸:將問(wèn)題逐層分解的過(guò)程,實(shí)際上并沒(méi)有對(duì)問(wèn)題進(jìn)行求解,而只是當(dāng)解決當(dāng)最后那些最簡(jiǎn)單的總是后,再沿著原來(lái)分解的逆過(guò)程逐步進(jìn)行綜合,(5)減半遞推技術(shù):所謂“減半”,是指將問(wèn)題材的規(guī)模減半,而問(wèn)題的性質(zhì)不變;所謂“遞推”,是指重復(fù)“減半”的過(guò)程。(6)回溯法:通過(guò)對(duì)問(wèn)題的分析,找出一個(gè)解決總是的線索,然后沿著這個(gè)線索,然后沿著這個(gè)線索逐步試探,對(duì)于每一步的試探,若試探成功,就得到問(wèn)題的解,若試探失敗,就逐步回退,換別的路線再進(jìn)行試探。81.1算法1.1.2算法的復(fù)雜度算法

5、復(fù)雜度:算法時(shí)間復(fù)雜和算法空間復(fù)雜度。1.算法的時(shí)間復(fù)雜度算法時(shí)間復(fù)雜度是指執(zhí)行算法所需要的計(jì)算工作量。算法的工作量用算法所執(zhí)行的基本運(yùn)算次數(shù)來(lái)度量。91.1算法(1)平均性態(tài): 是指用各種特定輸入下的基本運(yùn)算次數(shù)的加權(quán)平均值來(lái)度量算法的工作量。算法的平均性態(tài)定義:(2)最壞情況復(fù)雜性:是指在規(guī)模為n時(shí),算法所執(zhí)行的基本運(yùn)算的最大次數(shù)。101.1算法2.算法空間復(fù)雜度算法空間復(fù)雜度是指執(zhí)行這個(gè)算法所需要的內(nèi)存空間。 一個(gè)算法所占用的存儲(chǔ)空間包括算法程序所占的空間、輸入的初始數(shù)據(jù)所占的存儲(chǔ)空間以及算法執(zhí)行過(guò)程中所需要的額外空間。111.2數(shù)據(jù)結(jié)構(gòu)的基本概念 數(shù)據(jù)結(jié)構(gòu)研究的三個(gè)方面:(1)數(shù)據(jù)集合

6、中和數(shù)元素之間所固有的邏輯關(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)算。 討論以上問(wèn)題的主要目的是為了提高數(shù)據(jù)的效率。所謂提高數(shù)據(jù)處理的效率,主要包括兩個(gè)方面:一是提高數(shù)據(jù)處理的速度,二是盡量節(jié)省在數(shù)據(jù)處理過(guò)程中所占用的計(jì)算機(jī)存儲(chǔ)空間。121.2.1什么是數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)是指相互有關(guān)聯(lián)的數(shù)據(jù)元素的集合。1、數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)的邏輯結(jié)構(gòu)包含:(1)表示數(shù)據(jù)元素的信息;(2)表示各數(shù)據(jù)元素之間的前后件關(guān)系。132、數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu) 數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)存儲(chǔ)空間中的存放形式稱為數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)(也稱數(shù)據(jù)的物理結(jié)構(gòu))。

7、 數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)有順序、鏈接、索引等。141.2.3 線性結(jié)構(gòu)與非線性結(jié)構(gòu)根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間前后件關(guān)系的復(fù)雜程度、一般講數(shù)據(jù)結(jié)構(gòu)分為兩大類型:線性結(jié)構(gòu)與非線性結(jié)構(gòu) 線性結(jié)構(gòu)條件:(1)有且只有一個(gè)根結(jié)點(diǎn);(2)每一個(gè)結(jié)點(diǎn)最多有一個(gè)前件,也最多有一個(gè)后件。棧、隊(duì)列、串都是線性結(jié)構(gòu)。非線性結(jié)構(gòu):不滿足線性結(jié)構(gòu)條件的數(shù)據(jù)結(jié)構(gòu)。數(shù)組、廣義表、數(shù)和圖都是非線性結(jié)構(gòu)15線性表線性表的順序存儲(chǔ)結(jié)構(gòu)線性表的順序存儲(chǔ)結(jié)構(gòu)具有以下兩個(gè)基本特點(diǎn):(1)線性表中所有元素的所占的存儲(chǔ)空間是連續(xù)的;(2)線性表中各數(shù)據(jù)元素在存儲(chǔ)空間中是按邏輯順序依次存放的。ai的存儲(chǔ)地址為:ADR(ai)=ADR(a1)+(i

8、-1)k,,ADR(a1)為第一個(gè)元素的地址,k代表每個(gè)元素占的字節(jié)數(shù)。16順序表的基礎(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)通過(guò)元素的相對(duì)存儲(chǔ)地址來(lái)表示元素之間的關(guān)系4、線性表順序存儲(chǔ)的優(yōu)點(diǎn)是可隨機(jī)存取元素。5、順序表中邏輯上相鄰的元素的物理位置必定緊鄰。 6、順序表是一種隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)。7、在順序表中插入或刪除一個(gè)元素時(shí),需要平均移動(dòng)表的一半元素,具有移動(dòng)的元素個(gè)數(shù)與該元素的位置有關(guān)。8、在長(zhǎng)度為n的順序表中插入一個(gè)元素的時(shí)間復(fù)雜

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

10、的那只碗。 舉例2:在建筑工地上,使用的磚塊從底往上一層一層地碼放,在使用時(shí),將從最上面一層一層地拿取。19棧的基本運(yùn)算:(1)插入元素稱為入棧運(yùn)算;(2)刪除元素稱為退棧運(yùn)算;(3)讀棧頂元素是將棧頂元素賦給一個(gè)指定的變量,此時(shí)指針無(wú)變化201.如果進(jìn)棧序列為A,B,C,D,則可能的出棧序列是()A.)C,A,D,B B)B,D,C,A C) C,D,A,B D)任意順序2.棧中允許插入和刪除的一端叫做【棧頂】3.關(guān)于棧的描述,正確的是A.在棧中只能插入元素B.在棧中只能刪除元素C.只能在一端插入或刪除元素D.只能在一端插入元素,在另一端刪除元素。21BADCABDCA221.4 隊(duì)列及其基

11、本運(yùn)算隊(duì)列(Queue)也是一種運(yùn)算受限的線性表。它只允許在表的一端進(jìn)行插入,而在另一端進(jìn)行刪除。允許刪除的一端稱為隊(duì)頭(front),允許插入的一端稱為隊(duì)尾(rear)。 例如:排隊(duì)購(gòu)物。先進(jìn)入隊(duì)列的成員總是先離開(kāi)隊(duì)列。因此隊(duì)列亦稱作先進(jìn)先出(First In First Out)的線性表,簡(jiǎn)稱FIFO表。 當(dāng)隊(duì)列中沒(méi)有元素時(shí)稱為空隊(duì)列。在空隊(duì)列中依次加入元素a1,a2,an之后,a1是隊(duì)頭元素,an是隊(duì)尾元素。顯然退出隊(duì)列的次序也只能是a1,a2,an ,也就是說(shuō)隊(duì)列的修改是依先進(jìn)先出的原則進(jìn)行的。23下圖是隊(duì)列的示意圖: a1a2an 插入端和刪除端都是浮動(dòng)的。通常我們將插入端稱為隊(duì)尾,

12、用一個(gè)“隊(duì)尾指針”指示;而刪除端被稱為隊(duì)頭,用一個(gè)“隊(duì)頭指針”指示。 結(jié)論:先進(jìn)先出(First In First Out),簡(jiǎn)稱為FIFO線性表。隊(duì)列運(yùn)算包括(1)入隊(duì)運(yùn)算:從隊(duì)尾插入一個(gè)元素;(2)退隊(duì)運(yùn)算:從隊(duì)頭刪除一個(gè)元素。 出隊(duì)入隊(duì)241.5.1 線性鏈表的基本概念線性表順序存儲(chǔ)結(jié)構(gòu)的特點(diǎn)它是一種簡(jiǎn)單、方便的存儲(chǔ)方式。它要求線性表的數(shù)據(jù)元素依次存放在連續(xù)的存儲(chǔ)單元中,從而利用數(shù)據(jù)元素的存儲(chǔ)順序表示相應(yīng)的邏輯順序,這種存儲(chǔ)方式屬于靜態(tài)存儲(chǔ)形式。暴露的問(wèn)題在做插入或刪除元素的操作時(shí),會(huì)產(chǎn)生大量的數(shù)據(jù)元素移動(dòng);對(duì)于長(zhǎng)度變化較大的線性表,要一次性地分配足夠的存儲(chǔ)空間,但這些空間常常又得不到充

13、分的利用;線性表的容量難以擴(kuò)充。1.5 線性鏈表25 線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) 線性表的鏈?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指針域,用來(lái)存放結(jié)點(diǎn)的直接后繼的地址數(shù)據(jù)域,用來(lái)存放結(jié)點(diǎn)的值26例如 :線性表 (a, b,c,d)27 術(shù)語(yǔ)表示每個(gè)數(shù)據(jù)元素的兩部分信息組合在一起被稱為結(jié)

14、點(diǎn);其中表示數(shù)據(jù)元素內(nèi)容的部分被稱為數(shù)據(jù)域(data);表示直接后繼元素存儲(chǔ)地址的部分被稱為指針或指針域(next)。 headd cba單鏈表結(jié)構(gòu)示意圖datalink28其中,head是頭指針,它指向單鏈表中的第一個(gè)結(jié)點(diǎn),這是單鏈表操作的入口點(diǎn)。由于最后一個(gè)結(jié)點(diǎn)沒(méi)有直接后繼結(jié)點(diǎn),所以,它的指針域放入一個(gè)特殊的值NULL。NULL值在圖示中常用()符號(hào)表示。帶頭結(jié)點(diǎn)的單鏈表為了簡(jiǎn)化對(duì)鏈表的操作,人們經(jīng)常在鏈表的第一個(gè)結(jié)點(diǎn)之前附加一個(gè)結(jié)點(diǎn),并稱為頭結(jié)點(diǎn)。這樣可以免去對(duì)鏈表第一個(gè)結(jié)點(diǎn)的特殊處理。如下圖所示:Head=NULL或0稱為空表帶頭結(jié)點(diǎn)的單鏈表結(jié)構(gòu)示意圖head空表headd cba29

15、鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的特點(diǎn)(1)線性表中的數(shù)據(jù)元素在存儲(chǔ)單元中的存放順序與邏輯順序不一定一致;(2)在對(duì)線性表操作時(shí),只能通過(guò)頭指針進(jìn)入鏈表,并通過(guò)每個(gè)結(jié)點(diǎn)的指針域向后掃描其余結(jié)點(diǎn),這樣就會(huì)造成尋找第一個(gè)結(jié)點(diǎn)和尋找最后一個(gè)結(jié)點(diǎn)所花費(fèi)的時(shí)間不等,具有這種特點(diǎn)的存取方式被稱為順序存取方式。30循環(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或p-link=NULL循環(huán)鏈表p或p-link=Hhh空表31雙向鏈表(double linked lis

16、t)單鏈表具有單向性的缺點(diǎn)L空雙向循環(huán)鏈表:非空雙向循環(huán)鏈表:LABbcapp-prior-next= p= p-next-proir;32數(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)系是由指針域來(lái)確定的。鏈?zhǔn)酱鎯?chǔ)方式即可用于表示線性結(jié)構(gòu),也可用于表示非線性結(jié)構(gòu)。33棧的鏈?zhǔn)酱鎯?chǔ)若是棧中元素的數(shù)目變化范圍較大或不清楚棧

17、元素的數(shù)目,就應(yīng)該考慮使用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。人們將用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)表示的棧稱作“鏈?!?。鏈棧通常用一個(gè)無(wú)頭結(jié)點(diǎn)的單鏈表表示。如圖所示。由于棧的插入刪除操作只能在一端進(jìn)行,而對(duì)于單鏈表來(lái)說(shuō),在首端插入刪除結(jié)點(diǎn)要比尾端相對(duì)地容易一些,所以,我們將單鏈表的首端作為棧頂端,即將單鏈表的頭指針作為棧頂指針。34 top3516 樹(shù)與二叉樹(shù) 樹(shù)是一種簡(jiǎn)單的非線性結(jié)構(gòu),所有元素之間具有明顯的層次特性。 在樹(shù)結(jié)構(gòu)中,每一個(gè)結(jié)點(diǎn)只有一個(gè)前件,稱為父結(jié)點(diǎn),沒(méi)有前件的結(jié)點(diǎn)只有一個(gè),稱為樹(shù)的根結(jié)點(diǎn),簡(jiǎn)稱樹(shù)的根。每一個(gè)結(jié)點(diǎn)可以有多個(gè)后件,稱為該結(jié)點(diǎn)的子結(jié)點(diǎn)。沒(méi)有后件的結(jié)點(diǎn)稱為葉子結(jié)點(diǎn)。 在樹(shù)結(jié)構(gòu)中,一個(gè)結(jié)點(diǎn)所擁有的后件的個(gè)數(shù)

18、稱為該結(jié)點(diǎn)的度,所有結(jié)點(diǎn)中最大的度稱為樹(shù)的度。樹(shù)的最大層次稱為樹(shù)的深度。36(C)是有13個(gè)結(jié)點(diǎn)的樹(shù),其中A是根37結(jié)點(diǎn): 數(shù)據(jù)元素的內(nèi)容及其指向其子樹(shù)根的分支統(tǒng)稱為結(jié)點(diǎn)。結(jié)點(diǎn)的度 (Degree): 結(jié)點(diǎn)的分支數(shù),即結(jié)點(diǎn)擁有的子樹(shù)數(shù)。終端結(jié)點(diǎn)(葉子leaf): 度為0的結(jié)點(diǎn)。非終端結(jié)點(diǎn): 度不為0的結(jié)點(diǎn)。結(jié)點(diǎn)的層次: 樹(shù)中根結(jié)點(diǎn)的層次為1,根結(jié)點(diǎn)子樹(shù)的根為第2 層,以此類推。樹(shù)的度: 樹(shù)中所有結(jié)點(diǎn)度的最大值。樹(shù)的深度: 樹(shù)中所有結(jié)點(diǎn)層次的最大值。有序樹(shù)、無(wú)序樹(shù): 如果樹(shù)中每棵子樹(shù)從左向右的排列擁有一定的順序,不得互換,則稱為有序樹(shù),否則稱為無(wú)序樹(shù)。術(shù)語(yǔ)381.6.2二叉數(shù)及其基本性質(zhì)1. 定

19、義 定義:二叉樹(shù)是另一種樹(shù)形結(jié)構(gòu)。它與樹(shù)形結(jié)構(gòu)的區(qū)別是: (1)每個(gè)結(jié)點(diǎn)最多有兩棵子樹(shù); (2)子樹(shù)有左右之分。 二叉樹(shù)的特點(diǎn):(1)非空二叉樹(shù)只有一個(gè)根結(jié)點(diǎn);(2)每一個(gè)結(jié)點(diǎn)最多有兩棵子樹(shù),且分別稱為該結(jié)點(diǎn)的左子樹(shù)與右子樹(shù)。39G HD E FB CA第一層第二層40二叉樹(shù)的5種形態(tài):(a)(b)(c)(d)(e)(a)空樹(shù) (b)只有根結(jié)點(diǎn)的二叉樹(shù) (c) 右子樹(shù)為空的二叉樹(shù) (d) 左子樹(shù)為空的二叉樹(shù) (e) 左、右子樹(shù)均非空的二叉樹(shù)41 2二叉樹(shù)的性質(zhì)二叉樹(shù)具有下列5個(gè)重要的性質(zhì)?!拘再|(zhì)1】 在二叉樹(shù)的第i層上最多有2i-1個(gè)結(jié)點(diǎn)(i1)。 【性質(zhì)2】 深度為K的二叉樹(shù)最多有2K-1個(gè)

20、結(jié)點(diǎn)(K1)。【性質(zhì)3】 對(duì)于任意一棵二叉樹(shù)BT,如果度為0的結(jié)點(diǎn)(葉子)個(gè)數(shù)為n0,度為2的結(jié)點(diǎn)個(gè)數(shù)為n2,則n0=n2+142 8 9 10 11 12 13 14 154 5 6 72 3143滿二叉樹(shù):除最后一層外,每一層上的所有結(jié)點(diǎn)都有兩個(gè)子結(jié)點(diǎn)。完全二叉樹(shù):除最后一層外,每一層上的結(jié)點(diǎn)數(shù)均達(dá)到最大值;在最后一層只缺少右邊的若干結(jié)點(diǎn)。44 8 9 10 11 12 4 5 6 72 31 7 8 94 5 6 2 31一棵滿二叉樹(shù)一定是一棵完全二叉樹(shù),而一棵完全二叉樹(shù)不一定是滿二叉樹(shù)。完全二叉樹(shù)非完全二叉樹(shù)45完全二叉樹(shù)的特點(diǎn): (1)葉子結(jié)點(diǎn)只可能在層次最大的兩層上出現(xiàn) (2)對(duì)任

21、意結(jié)點(diǎn),若其右分支下的子孫的最大層次是l ,則其左分支下的子孫的最大層次必是l 或l+146【性質(zhì)4】 具有n個(gè)結(jié)點(diǎn)的完全二叉樹(shù)的深度為 log2n+1。其中,log2n 的結(jié)果是不大于log2n的最大整數(shù)?!拘再|(zhì)5】 對(duì)于有n個(gè)結(jié)點(diǎn)的完全二叉樹(shù)中的所有結(jié)點(diǎn)按從上到下,從左到右的順序進(jìn)行編號(hào),則對(duì)任意一個(gè)結(jié)點(diǎn)i (1in),都有:(1)如果i=1,則結(jié)點(diǎn)i是這棵完全二叉樹(shù)的根,沒(méi)有雙親;如果i 1其雙親結(jié)點(diǎn)的編號(hào)為 i/2。(2)如果2in,則結(jié)點(diǎn)i沒(méi)有左孩子(結(jié)點(diǎn)i為葉子結(jié)點(diǎn));否則其左孩子結(jié)點(diǎn)的編號(hào)為2i。(3)如果2i+1n,則結(jié)點(diǎn)i沒(méi)有右孩子;否則其右孩子結(jié)點(diǎn)的編號(hào)為2i+1。47二叉

22、樹(shù)的基本性質(zhì): (1)在二叉樹(shù)的第k層上,最多有2k-1(k1)個(gè)結(jié)點(diǎn);(2)深度為m的二叉樹(shù)最多有2m-1個(gè)結(jié)點(diǎn);(3)度為0的結(jié)點(diǎn)(即葉子結(jié)點(diǎn))總是比度為2的結(jié)點(diǎn)多一個(gè);(4)具有n個(gè)結(jié)點(diǎn)的二叉樹(shù),其深度至少為log2n+1,其中l(wèi)og2n表示取log2n的整數(shù)部分;(5)具有n個(gè)結(jié)點(diǎn)的完全二叉樹(shù)的深度為log2n+1;48 (6)設(shè)完全二叉樹(shù)共有n個(gè)結(jié)點(diǎn)。如果從根結(jié)點(diǎn)開(kāi)始,按層序(每一層從左到右)用自然數(shù)1,2,.n給結(jié)點(diǎn)進(jìn)行編號(hào)(k=1,2.n),有以下結(jié)論: 若k=1,則該結(jié)點(diǎn)為根結(jié)點(diǎn),它沒(méi)有父結(jié)點(diǎn);若k1,則該結(jié)點(diǎn)的父結(jié)點(diǎn)編號(hào)為INT(k/2); 若2kn,則編號(hào)為k的結(jié)點(diǎn)的左子結(jié)

23、點(diǎn)編號(hào)為2k;否則該結(jié)點(diǎn)無(wú)左子結(jié)點(diǎn)(也無(wú)右子結(jié)點(diǎn)); 若2k+1n,則編號(hào)為k的結(jié)點(diǎn)的右子結(jié)點(diǎn)編號(hào)為2k+1;否則該結(jié)點(diǎn)無(wú)右子結(jié)點(diǎn)。491.6.4二叉樹(shù)的遍歷 遍歷二叉樹(shù)的過(guò)程中,一般先遍歷左子樹(shù)、再遍歷右子樹(shù)。在先左后右的原則下,根據(jù)訪問(wèn)根結(jié)點(diǎn)的次序,二叉樹(shù)的遍歷分為三類:前序遍歷、中序遍歷、后序遍歷。50(1)先序遍歷若二叉樹(shù)為空,則結(jié)束遍歷操作;否則訪問(wèn)根結(jié)點(diǎn);先序遍歷左子樹(shù);先序遍歷右子樹(shù)。(2)中序遍歷若二叉樹(shù)為空,則結(jié)束遍歷操作;否則中序遍歷左子樹(shù);訪問(wèn)根結(jié)點(diǎn);中序遍歷右子樹(shù)。51(3)后序遍歷若二叉樹(shù)為空,則結(jié)束遍歷操作;否則后序遍歷左子樹(shù);后序遍歷右子樹(shù);訪問(wèn)根結(jié)點(diǎn)。下面是一棵

24、二叉樹(shù)及其經(jīng)過(guò)三種遍歷得到的相應(yīng)序列。52G HB CAD E F先序序列:ABDGCEFH中序序列:DGBAECHF后序序列:GDBEHFCA5317 查找技術(shù) 1.7.1順序查找順序查找是一種最簡(jiǎn)單的查找方法。其基本思想是將查找表作為一個(gè)線性表,可以是順序表,也可以是鏈表,依次用查找條件中給定的值與查找表中數(shù)據(jù)元素的關(guān)鍵字值進(jìn)行比較,若某個(gè)記錄的關(guān)鍵字值與給定值相等,則查找成功,返回該記錄的存儲(chǔ)位置,反之,若直到最后一個(gè)記錄,其關(guān)鍵字值與給定值均不相等,則查找失敗,返回查找失敗標(biāo)志。順序查找的使用情況:(1)線性表為無(wú)序表;(2)表采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。541.7.2二分法查找二分法查找只適用

25、于順序存儲(chǔ)的有序表。對(duì)于長(zhǎng)度為n的有序線性表,最壞情況只需比較log2n次。55假設(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 指向的位置;56若小于,查找范圍的低端數(shù)據(jù)元素指針low不變,高端數(shù)據(jù)元素指針high更新為mid-1; 若大于,查找范圍的高端數(shù)據(jù)元素指針high不變,低端數(shù)據(jù)元素指針low更新為mid+1;(4)重復(fù)步驟(2)、(3)直

26、到查找成功或查找范圍空(lowhigh),即查找失敗為止。(5)如果查找成功,返回找到元素的存放位置,即當(dāng)前的中間項(xiàng)位置指針mid;否則返回查找失敗標(biāo)志。571.8排序技術(shù)排序是指將一個(gè)無(wú)序序列整理成按值非遞減順序排列的有序序列。1.8.1交換排序所謂交換類排序法是指借助數(shù)據(jù)元素之間的互相交換進(jìn)行的排序的一種方法。581.冒泡排序冒泡排序是一種最簡(jiǎn)單的交換類排序方法,它是通過(guò)相鄰數(shù)據(jù)元素的交換逐步將線性表變成有序。冒泡排序法,需要比較的次數(shù)為n(n-1)/2; .快速排序59.8.2插入排序簡(jiǎn)單插入排序法最壞情況需要n(n-1)/2次比較; .希爾排序法最壞情況需要O(n1.5)次比較。60例

27、如: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 61.選擇類排序法(1)簡(jiǎn)單選擇排序法最壞情況需要n(n-1)/2次比較;(2)堆排序法最壞情況需要O(nlog2n)次比較。62第2章 程序設(shè)計(jì)基礎(chǔ)2.1 程序設(shè)計(jì)方法與風(fēng)格如何形成良好的程序設(shè)計(jì)風(fēng)格1、源程序文檔化;符號(hào)化命令:命名應(yīng)具

28、有一定的實(shí)際含義。程序注釋:增加正確的注釋,包括序言性注釋和功能性注釋。視覺(jué)組織:程序中添加一些空格、空行和縮進(jìn)使程序結(jié)構(gòu)一目了然 2、數(shù)據(jù)說(shuō)明的方法;(次序規(guī)范化;變量安排有序化;使用注釋)3、語(yǔ)句的結(jié)構(gòu);(結(jié)構(gòu)應(yīng)盡量簡(jiǎn)單) 4、輸入和輸出。632.2 結(jié)構(gòu)化程序設(shè)計(jì)1.原則:自頂向下、逐步求精、模塊化和限制使用goto語(yǔ)句。2.結(jié)構(gòu)化程序的基本結(jié)構(gòu)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)642.3 面向?qū)ο蠓椒嫦驅(qū)ο蠓椒ǖ膬?yōu)點(diǎn):(1)與人類習(xí)慣的思維方法一致;(2)穩(wěn)定性好;(3)可重用性好;(4)易于開(kāi)發(fā)大型軟件產(chǎn)品;(5)可維護(hù)性好。1.對(duì)象:用來(lái)表示客觀世界中的任何實(shí)體,對(duì)象是實(shí)體的抽象。面向

29、對(duì)象的程序設(shè)計(jì)方法中的對(duì)象是系統(tǒng)中用來(lái)描述客觀事物的一個(gè)實(shí)體,是構(gòu)成系統(tǒng)的一個(gè)基本單位,由一組表示其靜態(tài)特征的屬性和它可執(zhí)行的一組操作組成。屬性即對(duì)象所包含的信息,操作描述了對(duì)象執(zhí)行的功能,操作也稱為方法或服務(wù)。對(duì)象的基本特點(diǎn):(1)標(biāo)識(shí)惟一性;(2)分類性;(3)多態(tài)性;(4)封裝性;(5)模塊獨(dú)立性好。652.類是指具有共同屬性、共同方法的對(duì)象的集合。所以類是對(duì)象的抽象,對(duì)象是對(duì)應(yīng)類的一個(gè)實(shí)例。3.消息是一個(gè)實(shí)例與另一個(gè)實(shí)例之間傳遞的信息。消息的組成包括(1)接收消息的對(duì)象的名稱;(2)消息標(biāo)識(shí)符,也稱消息名;(3)零個(gè)或多個(gè)參數(shù)。4.繼承:能夠直接獲得已有的性質(zhì)和特征,而不必重復(fù)定義他們

30、。繼承分單繼承和多重繼承。單繼承指一個(gè)類只允許有一個(gè)父類,多重繼承指一個(gè)類允許有多個(gè)父類。5.多態(tài)性:同樣的消息被不同的對(duì)象接受時(shí)可導(dǎo)致完全不同的行動(dòng)的現(xiàn)象66第3章 軟件工程基礎(chǔ)3.1 軟件工程基本概念1.軟件的概念:計(jì)算機(jī)軟件是包括程序、數(shù)據(jù)及相關(guān)文檔的完整集合。2.分類:軟件按功能分為應(yīng)用軟件、系統(tǒng)軟件、支撐軟件(或工具軟件)。為了擺脫軟件危機(jī),提出軟件工程的概念,軟件危機(jī)主要體現(xiàn)在:成本、質(zhì)量、生產(chǎn)率等問(wèn)題 。3.軟件工程:軟件工程是應(yīng)用于計(jì)算機(jī)軟件的定義、開(kāi)發(fā)和維護(hù)的一整套方法、工具、文檔、實(shí)踐標(biāo)準(zhǔn)和工序。軟件工程包括3個(gè)要素:方法、工具和過(guò)程。673.2 軟件生命周期1.概念:軟件

31、產(chǎn)品從提出、實(shí)現(xiàn)、使用維護(hù)到停止使用退役的過(guò)程 。2.軟件生命周期三個(gè)3個(gè)時(shí)期8個(gè)階段:軟件定義:?jiǎn)栴}定義、可行性研究和需求分析軟件開(kāi)發(fā):概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試運(yùn)行維護(hù):運(yùn)行維護(hù)階段主要階段是:(1)可行性研究與計(jì)劃制定;(2)需求分析;(3)軟件設(shè)計(jì);(4)軟件實(shí)現(xiàn);(5)軟件測(cè)試;(6)運(yùn)行和維護(hù)。軟件生命周期各階段的活動(dòng)可以重復(fù),執(zhí)行時(shí)也可以有迭代。683.3 軟件設(shè)計(jì)1.軟件設(shè)計(jì)基本概念(1)按技術(shù)觀點(diǎn)分:結(jié)構(gòu)設(shè)計(jì):定義軟件各主要部件之間的關(guān)系數(shù)據(jù)設(shè)計(jì):將分析時(shí)創(chuàng)建的模型轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)的定義接口設(shè)計(jì):描述軟件內(nèi)部、軟件和協(xié)作系統(tǒng)之間及軟件與人之間如何通信。過(guò)程設(shè)計(jì):把系統(tǒng)結(jié)構(gòu)部

32、件轉(zhuǎn)化為軟件的過(guò)程性描述。(2)按工程管理角度分概要設(shè)計(jì):將軟件需求轉(zhuǎn)化為軟件體系結(jié)構(gòu)、確定系統(tǒng)級(jí)接口、全局?jǐn)?shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫(kù)模式詳細(xì)設(shè)計(jì):確定每個(gè)模塊的實(shí)現(xiàn)算法和局部數(shù)據(jù)結(jié)構(gòu)。692.軟件設(shè)計(jì)的基本原理(1)軟件設(shè)計(jì)中應(yīng)該遵循的基本原理和與軟件設(shè)計(jì)有關(guān)的概念抽象:軟件設(shè)計(jì)中考慮模塊化解決方案時(shí),可以定出多個(gè)抽象級(jí)別,抽象的層次從概要設(shè)計(jì)到詳細(xì)設(shè)計(jì)逐步降低。模塊化:將待開(kāi)發(fā)的軟件分解成若干小的簡(jiǎn)單的部分信息隱蔽:一個(gè)模塊內(nèi)包含的信息對(duì)于不需要這些信息的其他模塊來(lái)說(shuō)是不能訪問(wèn)的。模塊獨(dú)立性:每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能。(2)衡量軟件模塊獨(dú)立性使用耦合性和內(nèi)聚性兩個(gè)定性的度量標(biāo)準(zhǔn)內(nèi)聚:描述

33、模塊內(nèi)的功能聯(lián)系耦合:模塊間的互相連接的緊密程度的度量。優(yōu)秀軟件盡量做到高內(nèi)聚,低耦合。703.4 結(jié)構(gòu)化分析方法1.結(jié)構(gòu)化分析方法的定義:使用數(shù)據(jù)流圖(DFD)數(shù)據(jù)字典(DD)結(jié)構(gòu)化英語(yǔ)、判定表、判定樹(shù)的工具來(lái)建立一種新的、稱為結(jié)構(gòu)化規(guī)格說(shuō)明的目標(biāo)文檔。結(jié)構(gòu)化分析方法的實(shí)質(zhì):著眼于數(shù)據(jù)流,自頂向下,逐層分解,建立系統(tǒng)的處理流程,以數(shù)據(jù)流圖和數(shù)據(jù)字典為主要工具,建立系統(tǒng)的邏輯模型。結(jié)構(gòu)化分析的常用工具(1)數(shù)據(jù)流圖; (2)數(shù)據(jù)字典; (3)判定樹(shù); (4)判定表。71數(shù)據(jù)流圖:描述數(shù)據(jù)處理過(guò)程的工具,是需求理解的邏輯模型的圖形表示,它直接支持系統(tǒng)功能建模。數(shù)據(jù)字典:對(duì)所有與系統(tǒng)相關(guān)的數(shù)據(jù)元素

34、的一個(gè)有組織的列表,以及精確的、嚴(yán)格的定義,使得用戶和系統(tǒng)分析員對(duì)于輸入、輸出、存儲(chǔ)成分和中間計(jì)算結(jié)果有共同的理解。判定樹(shù):從問(wèn)題定義的文字描述中分清哪些是判定的條件,哪些是判定的結(jié)論,根據(jù)描述材料中的連接詞找出判定條件之間的從屬關(guān)系、并列關(guān)系、選擇關(guān)系,根據(jù)它們構(gòu)造判定樹(shù)。判定表:與判定樹(shù)相似,當(dāng)數(shù)據(jù)流圖中的加工要依賴于多個(gè)邏輯條件的取值,即完成該加工的一組動(dòng)作是由于某一組條件取值的組合而引發(fā)的,使用判定表描述比較適宜。數(shù)據(jù)字典是結(jié)構(gòu)化分析的核心。722.軟件需求規(guī)格說(shuō)明書(shū)的特點(diǎn):(1)正確性;(2)無(wú)岐義性;(3)完整性;(4)可驗(yàn)證性;(5)一致性;(6)可理解性;(7)可追蹤性。 73

35、3.5 軟件測(cè)試1.軟件測(cè)試定義:使用人工或自動(dòng)手段來(lái)運(yùn)行或測(cè)定某個(gè)系統(tǒng)的過(guò)程,其目的在于檢驗(yàn)它是否滿足規(guī)定的需求或是弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別。軟件測(cè)試的目的:發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過(guò)程。軟件測(cè)試方法:靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試。靜態(tài)測(cè)試包括代碼檢查、靜態(tài)結(jié)構(gòu)分析、代碼質(zhì)量度量。不實(shí)際運(yùn)行軟件,主要通過(guò)人工進(jìn)行。動(dòng)態(tài)測(cè)試:是基本計(jì)算機(jī)的測(cè)試,主要包括白盒測(cè)試方法和黑盒測(cè)試方法。白盒測(cè)試:在程序內(nèi)部進(jìn)行,主要用于完成軟件內(nèi)部CAO作的驗(yàn)證。主要方法有邏輯覆蓋、基本基路徑測(cè)試。黑盒測(cè)試:主要診斷功能不對(duì)或遺漏、界面錯(cuò)誤、數(shù)據(jù)結(jié)構(gòu)或外部數(shù)據(jù)庫(kù)訪問(wèn)錯(cuò)誤、性能錯(cuò)誤、初始化和終止條件錯(cuò),用于軟件確認(rèn)。主要方

36、法有等價(jià)類劃分法、邊界值分析法、錯(cuò)誤推測(cè)法、因果圖等。軟件測(cè)試過(guò)程一般按4個(gè)步驟進(jìn)行:?jiǎn)卧獪y(cè)試、集成測(cè)試、驗(yàn)收測(cè)試(確認(rèn)測(cè)試)和系統(tǒng)測(cè)試。743.6 程序的調(diào)試程序調(diào)試的任務(wù)是診斷和改正程序中的錯(cuò)誤,主要在開(kāi)發(fā)階段進(jìn)行。程序調(diào)試的基本步驟:(1)錯(cuò)誤定位;(2)修改設(shè)計(jì)和代碼,以排除錯(cuò)誤;(3)進(jìn)行回歸測(cè)試,防止引進(jìn)新的錯(cuò)誤。軟件調(diào)試可分表靜態(tài)調(diào)試和動(dòng)態(tài)調(diào)試。靜態(tài)調(diào)試主要是指通過(guò)人的思維來(lái)分析源程序代碼和排錯(cuò),是主要的設(shè)計(jì)手段,而動(dòng)態(tài)調(diào)試是輔助靜態(tài)調(diào)試。主要調(diào)試方法有:(1)強(qiáng)行排錯(cuò)法;(2)回溯法;(3)原因排除法。75第四章 數(shù)據(jù)庫(kù)設(shè)計(jì)基礎(chǔ)41 數(shù)據(jù)庫(kù)系統(tǒng)的基本概念數(shù)據(jù):實(shí)際上就是描述事物的符號(hào)記錄。數(shù)據(jù)的特點(diǎn):有一定的結(jié)構(gòu),有型與值之分,如整型、實(shí)型、字符型等。而數(shù)據(jù)的值給出了符合定型的值,如整型值15。數(shù)據(jù)庫(kù):是數(shù)據(jù)的集合,具有統(tǒng)一的結(jié)構(gòu)形式并存放于統(tǒng)一的存儲(chǔ)介質(zhì)內(nèi),是多種應(yīng)用數(shù)據(jù)的集成,并可被各個(gè)應(yīng)用程序共享。數(shù)據(jù)庫(kù)存放數(shù)據(jù)是按數(shù)據(jù)所提供的數(shù)據(jù)模式存放的,具有集成與共享的特點(diǎn)。數(shù)據(jù)庫(kù)管理系統(tǒng):一種系統(tǒng)軟件,負(fù)責(zé)數(shù)據(jù)庫(kù)中的數(shù)據(jù)組織、數(shù)據(jù)操縱、數(shù)據(jù)維護(hù)、控制及保護(hù)和數(shù)據(jù)服務(wù)等,是數(shù)據(jù)庫(kù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論