




已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
目錄二級公共基礎知識考綱 1第一章 數(shù)據(jù)結構與算法2第二章 程序設計基礎19第三章 軟件工程基礎23第四章 數(shù)據(jù)庫設計基礎32全國計算機等級考試二級公共基礎知識考綱考試內(nèi)容一、基本數(shù)據(jù)結構與算法1.算法的基本概念;算法復雜度的概念和意義(時間復雜度與空間復雜度)。2.數(shù)據(jù)結構的定義;數(shù)據(jù)的邏輯結構與存儲結構;數(shù)據(jù)結構的圖形表示;線性結構與非線性結構的概念。3.線性表的定義;線性表的順序存儲結構及其插入與刪除運算。4.棧和隊列的定義;棧和隊列的順序存儲結構及其基本運算。5.線性單鏈表、雙向鏈表與循環(huán)鏈表的結構及其基本運算。6.樹的基本概念;二叉樹的定義及其存儲結構;二叉樹的前序、中序和后序遍歷。7.順序查找與二分法查找算法;基本排序算法(交換類排序,選擇類排序,插入類排序)。二、程序設計基礎1.程序設計方法與風格。2.結構化程序設計。3.面向對象的程序設計方法,對象,方法,屬性及繼承與多態(tài)性。三、軟件工程基礎1.軟件工程基本概念,軟件生命周戎概念,軟件工具與軟件開發(fā)環(huán)境。2.結構化分析方法,數(shù)據(jù)流圖,數(shù)據(jù)字典,軟件需求規(guī)格說明書。3.結構化設計方法,總體設計與詳細設計。4.軟件測試的方法,白盒測試與黑盒測試,測試用例設計,軟件測試的實施,單元測試、集成測試和系統(tǒng)測試。5.程序的調試,靜態(tài)調試與動態(tài)調試。四、數(shù)據(jù)庫設計基礎1.數(shù)據(jù)庫的基本概念:數(shù)據(jù)庫,數(shù)據(jù)庫管理系統(tǒng),數(shù)據(jù)庫系統(tǒng)。2.數(shù)據(jù)模型,實體聯(lián)系模型及E-R圖,從E-R圖導出關系數(shù)據(jù)模型。3.關系代數(shù)運算,包括集合運算及選擇、投影、連接運算,數(shù)據(jù)庫規(guī)范化理論。4.數(shù)據(jù)庫設計方法和步驟:需求分析、概念設計、邏輯設計和物理設計的相關策略??荚嚪绞焦不A的考試方式為筆試,與C語言(VisualBASIC、Visual FoxPro、Java、Access、Visual C+)的筆試部分合為一張試卷。公共基礎部分占全卷的30分。公共基礎知識有10道選擇題和5道填空題。第一章 數(shù)據(jù)結構與算法一、內(nèi)容要點(一)算法1算法的基本概念算法是指解題方案的準確而完整的描述。即是一組嚴謹?shù)囟x運算順序的規(guī)則,并且每一個規(guī)則都是有效的,且是明確的,沒有二義性,同時該規(guī)則將在有限次運算后可終止。1)算法的基本特征(1)可行性由于算法的設計是為了在某一個特定的計算工具上解決某一個實際的問題而設計的,因此,它總是受到計算工具的限制,使執(zhí)行產(chǎn)生偏差。如:計算機的數(shù)值有效位是有限的,當大數(shù)和小數(shù)進行運算時,往往會因為有效位數(shù)的影響而使小數(shù)丟失,因此,在算法設計時,應該考慮到這一點。(2)確定性算法的設計必須是每一個步驟都有明確的定義,不允許有模糊的解釋,也不能有多義性。例如,一個實際的問題,小寶和萍萍共有12個蘋果,小寶比萍萍多4個,請問小寶和萍萍各有幾個蘋果?這個問題,我們可以立一個方程 來求解,要求x和y的值,公式是正確的,但如何讓計算能夠進行計算,我們的算法不能把公式直接輸進去,而應該設計出解題的步驟和過程。即設計的算法是計算工具所能夠正常解決問題的過程。(3)有窮性算法的有窮性,即在一定的時間是能夠完成的,即算法應該在計算有限個步驟后能夠正常結束。例如,在數(shù)學中的無窮級數(shù),在計算機中只能求有限項,即計算的過程是有窮的。(4)擁有足夠的情報算法的執(zhí)行與輸入的數(shù)據(jù)和提供的初始條件相關,不同的輸入或初始條件會有不同的輸出結果,提供準確的初始條件和數(shù)據(jù),才能使算法正確執(zhí)行。2)算法的基本要素一是數(shù)據(jù)對象的運算和操作,二是算法的控制結構。(1)算法中對數(shù)據(jù)的運算和操作算法實際上是按解題要求從環(huán)境能進行的所有操作中選擇合適的操作所組成的一組指令序列。即算法是計算機所能夠處理的操作所組成的指令序列。(2)算法的控制結構算法的功能不僅取決于所選用的操作,而且還與各操作之間的順序有關。在算法中,操作的執(zhí)行順序又稱算法的控制結構,一般的算法控制結構有三種:順序結構、選擇結構和循環(huán)結構。在算法描述是,有相關的工具對這三種結構進行描述,常用的描述工具有:流程圖、N-S結構圖和算法描述語言等。3)算法設計的基本方法為用計算機解決實際問題而設計的算法,即是計算機算法。通常的算法設計有如下幾種:(1)列舉法列舉法的基本思想是,根據(jù)提出的問題,列舉出所有可能的情況,并用問題中給定的條件檢驗哪些是滿足條件的,哪些是不滿足條件的。列舉法通常用于解決“是否存在”或“有哪些可能”等問題。例如,我國古代的趣味數(shù)學題:“百錢買百雞”、“雞兔同籠”等,均可采用列舉法進行解決。使用列舉法時,要對問題進行詳細的分析,將與問題有關的知識條理化、完備化、系統(tǒng)化,從中找出規(guī)律。(2)歸納法歸納法的基本思想是,通過列舉少量的特殊情況,經(jīng)過分析,最后找出一般的關系。歸納是一種抽象,即從特殊現(xiàn)象中找出一般規(guī)律。但由于在歸納法中不可能對所有的情況進行列舉,因此,該方法得到的結論只是一種猜測,還需要進行證明。(3)遞推遞推,即是從已知的初始條件出發(fā),逐次推出所要求的各個中間環(huán)節(jié)和最后結果。其中初始條件或問題本身已經(jīng)給定,或是通過對問題的分析與化簡而確定。遞推的本質也是一種歸納,遞推關系式通常是歸納的結果。例如,裴波那契數(shù)列,是采用遞推的方法解決問題的。(4)遞歸在解決一些復雜問題時,為了降低問題的復雜程序,通常是將問題逐層分解,最后歸結為一些最簡單的問題。這種將問題逐層分解的過程,并沒有對問題進行求解,而只是當解決了最后的問題那些最簡單的問題后,再沿著原來分解的逆過程逐步進行綜合,這就是遞歸的方法。遞歸分為直接遞歸和間接遞歸兩種方法。如果一個算法直接調用自己,稱為直接遞歸調用;如果一個算法A調用另一個算法B,而算法B又調用算法A,則此種遞歸稱為間接遞歸調用。(5)減半遞推技術減半遞推即將問題的規(guī)模減半,然后,重復相同的遞推操作。例如,一元二次方程的求解。(6)回溯法有些實際的問題很難歸納出一組簡單的遞推公式或直觀的求解步驟,也不能使用無限的列舉。對于這類問題,只能采用試探的方法,通過對問題的分析,找出解決問題的線索,然后沿著這個線索進行試探,如果試探成功,就得到問題的解,如果不成功,再逐步回退,換別的路線進行試探。這種方法,即稱為回溯法。如人工智能中的機器人下棋。2算法復雜度算法的復雜度包括時間復雜度和空間復雜度。1)時間復雜度即實現(xiàn)該算法需要的計算工作量。算法的工作量用算法所執(zhí)行的基本運算次數(shù)來計算。同一個問題規(guī)模下,如果算法執(zhí)行所需要的基本次數(shù)取決于某一特定輸入時,可以用以下兩種方法來分析算法的工作量:算法工作量=f(n)(1)平均性態(tài)用各種特定輸入下的基本運算次數(shù)的加權平均值來度量算法的工作量。設x是某個可能輸入中的某個特定輸入,p(x)是x出現(xiàn)的概率,t(x)是算法在輸入為x時所執(zhí)行的基本運算次數(shù),則算法的平均性態(tài)定義為: Dn表示當規(guī)模為n時,算法執(zhí)行時所有可能輸入的集合。(2)最壞情況復雜度指在規(guī)模為n時,算法所執(zhí)行的基本運算的最大次數(shù)。它定義為: 例如,在具有n個元素的數(shù)列中搜索一個數(shù)x。平均性態(tài): 即該數(shù)在數(shù)列中任何位置出現(xiàn)的數(shù)列是相同的,也有可能不存在,存在的概率為q。如果有一半的機會存在,則概率q為1/2,平均性態(tài): 如果查找的元素一定在數(shù)列中,則每個數(shù)存在的概率即為1,則平均性態(tài)為: 最壞情況分析:即要查找的元素X在數(shù)列的最后或不在數(shù)列中,顯然,它的最壞情況復雜度為: 2)算法的空間復雜度指要執(zhí)行該算法所需要的內(nèi)存空間。算法所占用的內(nèi)存空間包括算法程序所占的空間、輸入的初始數(shù)據(jù)所占的存儲空間以及算法執(zhí)行過程中所需要的額外空間,如執(zhí)行過程中工作單元以及某種數(shù)據(jù)結構所需要的附加存儲空間等。(二)數(shù)據(jù)結構的基本概念1概念數(shù)據(jù)結構是指相互有關聯(lián)的數(shù)據(jù)元素的集合。它包括以下兩個方面:l表示數(shù)據(jù)元素的信息l表示各數(shù)據(jù)之間的前后件關系1)數(shù)據(jù)的邏輯結構是指反映數(shù)據(jù)元素之間的邏輯關系的數(shù)據(jù)結構。數(shù)據(jù)的邏輯結構有兩個要素:l數(shù)據(jù)元素的集合,記作Dl數(shù)據(jù)之間的前后件關系,記作R則數(shù)據(jù)結構B=(D,R)2)數(shù)據(jù)的存儲結構數(shù)據(jù)的邏輯結構在計算機存儲空間中的存放形式稱為數(shù)據(jù)的存儲結構,或數(shù)據(jù)的物理結構。即數(shù)據(jù)存儲時,不僅要存放數(shù)據(jù)元素的信息,而且要存儲數(shù)據(jù)元素之間的前后件關系的信息。通常的數(shù)據(jù)存儲結構有順序、鏈接、索引等存儲結構。2數(shù)據(jù)結構的圖形表示數(shù)據(jù)結構的圖形表示有兩個元素:l中間標有元素值的方框表示數(shù)據(jù)元素,稱為數(shù)據(jù)結點l用有向線段表示數(shù)據(jù)元素之間的前后件關系,即有向線段從前件結點指向后件結點注意:在結構圖中,沒有前件的結點稱為根結點,沒有后件的結點稱為終端結點,也稱葉子結點。3線性結構與非線性結構如果一個數(shù)據(jù)元素都沒有,該數(shù)據(jù)結構稱為空數(shù)據(jù)結構;在空數(shù)據(jù)結構中插入一個新的元素后數(shù)據(jù)結構變?yōu)榉强諗?shù)據(jù)結構;將數(shù)據(jù)結構中的所有元素均刪除,則該數(shù)據(jù)結構變成空數(shù)據(jù)結構。如果一個非空的數(shù)據(jù)結構滿足如下條件,則該數(shù)據(jù)結構為線性結構:l有且只有一個根結點l每一個結點最多只有一個前件,也最多只有一個后件線性結構又稱線性表。注意:在線性結構表中插入或刪除元素,該線性表仍然應滿足線性結構。如果一個數(shù)據(jù)結構不滿足線性結構,則稱為非線性結構。(三)線性表及其順序存儲結構1基本概念線性表是最常用的數(shù)據(jù)結構,它由一組數(shù)據(jù)元素組成。注意:這里的數(shù)據(jù)元素是一個廣義的數(shù)據(jù)元素,并不僅僅是指一個數(shù)據(jù)。如,矩陣、學生記錄表等。非空線性表的結構特征:l有且只有一個根結點,它無前件l有且只有一個終端結點,它無后件l除根結點和終端結點之外,所有的結點有且只有一個前件和一個后件。線性表中結點的個數(shù)稱為結點的長度n。當n=0時,稱為空表。2順序存儲結構順序存儲結構的特點:l線性表中所有的元素所占的存儲空間是連續(xù)的l線性表中各數(shù)據(jù)元素在存儲空間中是按邏輯順序依次存放的通常,順序存儲結構中,線性表中每一個數(shù)據(jù)元素在計算機存儲空間中的存儲地址由該元素在線性表中的位置序號唯一確定。線性表的順序存儲結構下的基本運算:l在指定位置插入一個元素l刪除線性表中的指定元素l查找某個或某些特定的元素l線性表的排序l按要求將一個線性表拆分為多個線性表l將多個線性表合并為一個線性表l復制線性表l逆轉一個線性表3線性表的基本操作1)順序表的插入運算在順序存儲結構的線性表中插入一個元素。注意:找到插入位置后,將插入位置開始的所有元素從最后一個元素開始順序后移。另外,在定義線性表時,一定要定義足夠的空間,否則,將不允許插入元素。2)順序表的刪除運算在順序在存儲結構的線性表中刪除一個元素。注意:找到刪除的數(shù)據(jù)元素后,從該元素位置開始,將后面的元素一一向前移動,在移動完成后,線性表的長度減1(四)棧和隊列1棧及其基本運算1)棧棧是一種特殊的線性表,它是限定在一端進行插入和刪除的線性表。它的插入和刪除只能在表的一端進行,而另一端是封閉的,不允許進行插入和刪除操作。在棧中,允許插入和刪除操作一端稱為棧頂,不允許插入和刪除操作的一端則稱為棧底。棧頂?shù)脑乜偸亲詈蟊徊迦氲脑?,也是最先被刪除的元素。它遵循的原則是:先進后出或后進先出。堆棧指針總是指向棧頂元素的。2)棧的順序存儲及其運算在棧的順序存儲空間S(1:m)中,S(bottom)通常為棧底元素,S(top)為棧頂元素。Top=0表示??眨籺op=m表示棧滿。1)入棧運算即在棧的頂部插入一個新元素。操作方式是:將棧頂指針加1,再將元素插入至指針所指的位置。2)退棧運算退棧運算即將棧頂元素取出并賦給一個指定的變量。操作方式是:先將棧頂元素賦給指定的變量,再將棧頂指針減1。3)讀棧頂元素將棧頂元素賦給某一指定變量,但棧頂指針不變。2隊列及其基本運算1)隊列隊列即是允許在一端進行插入,而在另一端進行刪除的線性表。允許插入的一端稱為隊尾,通常用一個尾指針指向隊尾;允許刪除的一端稱為隊首,通常用一個隊首指針指向排隊元素的前一個位置。隊列遵循的規(guī)則是:先進先出或后進后出2)循環(huán)隊列及其運算隊列的順序存儲結構一般采用循環(huán)隊列的形式。循環(huán)隊列,即是次隊列存儲空間的最后一個位置繞到第一個位置,形成邏輯上的環(huán)狀空間,供隊列循環(huán)使用。在循環(huán)隊列中,用隊尾指針rear指向隊列中的隊尾元素,用排頭指針front指向排頭元素的前一個位置,因此,從排頭指針front指向的后一個位置到隊尾指針rear指向的位置之間所有的元素均為隊列中的元素。循環(huán)隊列的初始狀態(tài)為空,即rear=front=m。這里m即為隊列的存儲空間。循環(huán)隊列的基本運算:入隊運算和退隊運算。入隊運算:每進行一次入隊運算,隊尾指針加1。當隊尾指針rear=m+1時,即表示隊列空間的尾部已經(jīng)放置了元素,則下一個元素應該旋轉到隊列空間的首部,即rear=1退隊運算:每退隊一個元素,排頭指針加1。當排頭指針front=m+1時,即排頭指針指向隊列空間的尾部,退隊后,排頭指針指向隊列空間的開始,即front=1。在隊列操作時,循環(huán)隊列滿時,front=rear,隊列空時,也有rear=front,即在隊列空或滿時,排頭指針和隊尾指針均指向同一個位置。要判斷隊列空或滿時,還應增加一個標志,s值的定義: 判斷隊列空與隊列滿的條件下:隊列空的條件:s=0隊列滿的條件:s=1、front=rear(1)入隊運算即在隊尾加入一個新元素。這個運算有兩個基本操作:首先,將隊尾指針加1,即rear=rear+1,當rear=m+1時,置rear=1,然后,將新元素插入到隊尾指針指向的位置。當循環(huán)隊列非空(s=1),且front=rear時,隊列滿,不能進行入隊操作。此情況稱“上溢”。(2)退隊操作即將隊首的元素賦給一個指定的變量。該運算也有兩個基本操作:首先,將排頭指針加1,即front=front+1,當front=m+1時,置front=1,然后,將排頭指針指向的元素賦給指定的變量。當循環(huán)隊列為空(s=0)時,不能進行退隊運算。此種情況稱為“下溢”。(五)線性鏈表1基本概念前面的線性表均是采用順序存儲結構及在順序存儲結構下的運算。1)順序存儲的優(yōu)點:l結構簡單l運算方便2)順序存儲結構的缺點:l要在順序存儲的線性表中插入一個新元素或刪除一個元素時,為了保證插入或刪除后的線性表仍然為順序存儲。在插入或刪除元素時,需要移動大量的數(shù)據(jù)元素,因此運算效率較低。l如果一個線性表分配順序存儲空間后,如果出現(xiàn)線性表的存儲空間已滿,但還需要插入元素時,會發(fā)生“上溢”錯誤。l在實際應用時,可能有多個線性表同時使用存儲空間,這樣給存儲空間的分配帶來問題,有可能使有的隊列空間不夠或過多造成浪費?;谏鲜銮闆r,對于大的線性表或元素變動頻繁的大線性表不宜采用順序存儲結構,而應采用鏈式存儲結構。3)鏈式存儲結構假設每一個數(shù)據(jù)結點對應一個存儲單元,該存儲單元稱為存儲結點,簡稱結點。在鏈式存儲方式中,要求每一個結點由兩部分組成:一部分用于存放數(shù)據(jù)元素,你為數(shù)據(jù)域;另一部分用于存放指針,稱為指針域。該指針用于指向該結點的前一個或后一個結點。在鏈式存儲結構中,存儲數(shù)據(jù)結構的存儲空間可以不連續(xù),各數(shù)據(jù)結點的存儲順序與數(shù)據(jù)元素之間的邏輯關系不一致,而數(shù)據(jù)元素之間的邏輯關系是由指針域來確定的。鏈式存儲結構既可以用于線性結構,也可用于非線性結構。4)線性鏈表線性表的鏈式存儲結構稱為線性鏈表。將存儲空間劃分成若干的小塊,每塊占用若干個字節(jié),這些小塊稱為存儲結點。將存儲結點分為兩個部分,一部分用于存儲數(shù)據(jù)元素的值,稱為數(shù)據(jù)域;另一部分用于存儲元素之間的前后件關系,即存放下一個元素在存儲序號(即存儲地址),即指向后件結點,稱為指針域。在線性鏈表中用一個專門的指針HEAD指向線性鏈表中第一個數(shù)據(jù)元素的結點(即存放第一個元素的地址)。線性表中最后一個元素沒有后件,因此,線性鏈表中的最后一個結點的指針域為空(用Null或0表示),表示鏈終結。在線性鏈表中,各元素的存儲序號是不連續(xù)的,元素間的前后件關系與位置關系也是不一致的。在線性鏈表中,前后件的關系依靠各結點的指針來指示,指向表的第一個元素的指針HEAD稱為頭指針,當HEAD=NULL時,表示該鏈表為空。對于線性鏈表,可以從頭指針開始,沿著各結點的指針掃描到鏈表中的所有結點。這種線性鏈表稱為線性單鏈表,即可以從表頭開始向后掃描鏈表中的所有結點,而不能從中間或表尾結點向前掃描位于該結點之前的元素。這種鏈表結構的缺點是不能任意地對鏈表中的元素按下同的方向進行掃描。在某些應用時,如果對鏈表中的元素設置兩個指針域,一個為指向前件的指針域,稱為左指針(LLink),一個為指向后件的指針域,稱為右指針(RLink)。則這種鏈表是雙向鏈表。5)帶鏈的棧帶鏈的棧即是用來收集計算機存儲空間中的所有空閑的存儲結點,這種帶鏈的棧稱為可利用棧。當需要存儲結點時,即從可利用的棧的頂部取出棧頂結點;當系統(tǒng)要釋放一個存儲結點時,將該結點空間放回到可利用棧的棧頂。即在計算機中所有空閑的空間,均可以以結點的方式鏈接到可利用棧中,隨著其他線性鏈表中結點的插入與刪除,可利用棧處于動態(tài)變化之中,即可利用棧經(jīng)常要進行退棧和入棧操作。6)帶鏈的隊列隊列也是線性表,也可利用鏈式存儲結構來進行保存。2線性鏈表的基本運算線性鏈表包括的基本運算:l在鏈表中包含指定元素的結點之前插入一個新元素l在鏈表中刪除包含指定元素的結點l將兩個線性鏈表按要求合并成一個線性鏈表l將一個線性鏈表按要求進行分解l逆轉線性鏈表l復制線性鏈表l線性鏈表的排序l線性鏈表的查找1)線性鏈表中查找指定的元素在線性鏈表中查找元素X:從頭指針指向的結點開始往后沿指針進行掃描,直到后面已沒有結點或下一個結點的數(shù)據(jù)域為X為止。元素的查找,經(jīng)常是為了進行插入或刪除操作而進行的,因此,在查找時,往往是需要記錄下該結點的前一個結點。2)線性鏈表的插入線性鏈表的插入即在鏈式存儲結構的線性表中插入一個新元素。在線性鏈表中包含元素x的結點之前插入新元素b,插入過程:(1)從可利用棧中取得一個結點,設該結點號為p,即取得的結點的存儲序號存放在變量p中。并置結點p的數(shù)據(jù)域為插入的元素值b。(2)在線性鏈表中尋找包含元素x的前一個結點,該結點的存儲序號為q。(3)將結點p插入到結點q之后。具體的操作:首先,使結點p插入到結點q之后(即結點q的后件結點),然后,使結點q的指針域 內(nèi)容改為指向結點p。線性鏈表的插入操作,新結點是為來自于可利用棧,因此不會造成線性表的溢出。同樣,由于可利用??杀欢鄠€線性表利用,因此,不會造成存儲空間的浪費,大家動態(tài)地共同使用存儲空間。3)線性鏈表的刪除線性鏈表的刪除,即是在鏈式存儲結構下的線性表中刪除指定元素的結點。操作方式:(1)在線性表中找到包含指定元素x的前一個結點p(2)將該結點p后的包含元素x的結點從線性鏈表中刪除,然后將被刪除結點的后一個結點q的地址提供給結點p的指針域,即將結點p指向結點q。(3)將刪除的結點送回可利用棧。從以上的刪除操作可見,刪除一個指定的元素,不需要移動其他的元素即可實現(xiàn),這是順序存儲的線性表所不能實現(xiàn)的。同時,此操作還可更有效地利用計算機的存儲空間。3循環(huán)鏈表及其基本操作在線性鏈表中,雖然對數(shù)據(jù)元素的插入和刪除操作比較簡單,但由于它對第一個結點和空表需要單獨處理,使得空表與非空表的處理不一致。循環(huán)鏈表,即是采用另一種鏈接方式,它的特點如下:(1)在循環(huán)鏈表中增加一個表頭結點,其數(shù)據(jù)域為任意或根據(jù)需要來設置,指針域指向線性表的第一個元素的結點。循環(huán)鏈表的頭指針指向表頭結點。(2)循環(huán)鏈表中最后一個結點的指針域不是空的,而是指向表頭結點。在循環(huán)鏈表中,所有結點的指針構成一個環(huán)狀鏈。在循環(huán)鏈表中,只要指出表中任何一個結點的位置,均可以從它開始掃描到所有的結點,而線性鏈表做不到,線性鏈表是一種單向的鏈表,只能按照指針的方向進行掃描。循環(huán)鏈表中設置了一個表頭結點,因此,在任何時候都至少有一個結點,因此空表與非空表的運算相統(tǒng)一。(六)樹與二叉樹1樹的基本概念樹是一種簡單的非線性結構。在樹結構中,數(shù)據(jù)元素之間有著明顯的層次結構。在樹的圖形表示中,用直線連接兩端的結點,上端點為前件,下端點為后件。在樹結構中,每一個結點只有一個前件,稱為父結點。如A即為結點B、C、D的父結點。沒有父結點的結點只有一個,稱為根結點。如上圖所示,結點A即為根結點。每一個結點可以有多個后件,它們均稱為該結點的子結點。如結點G、H、I是結點D的子結點。沒有后件的結點,稱為葉子結點。上圖中,葉子結點有:J、M、N、L、C、G、H、I。在樹結構中,一個結點所擁有的后件結點個數(shù)稱為該結點的度。例如,結點D的度為3,結點E的度為1等,按此原則,所有葉子結點的度均為0。在樹中,所有結點中最大的度稱為該樹的度。上圖所示的樹中,所有結點中最大的度是3,所以該樹的度為3。樹分層,根結點為第一層,往下依次類推。同一層結點的所有子結點均在下一層。如上圖:A結點在第1層,B、C、D結點在第2層;E、F、G、H、I在第3層;J、K、L在第4層;M、N在第5層。樹的最大層次稱為樹的深度。上圖樹的深度為5。在樹中,某結點的一個子結點為根構成的樹稱作該結點的子樹。葉子結點沒有子樹。在計算機中,可以用樹來表示算術表達式。原則如下:(1)表達式中每一個運算符在樹中對應一個結點,稱為運算符結點(2)運算符的每一個運算對象在樹中為該運算符結點的子樹(在樹中的順序為從左到右)(3)運算對象中的單變量均為葉子結點樹在計算機中用多重鏈表表示。多重鏈表中的每個結點描述了樹中對應結點的信息,而每個結點中的鏈域(即指針域)個數(shù)將隨著樹中該結點的度而定義。如果在樹中,每一個結點的子結點的個數(shù)不相同,因此在多重鏈中各結點的鏈域個數(shù)也不相同,會導致算法太復雜。因此,在樹中,常采用定長結點來表示樹中的每一個結點,即取樹的度作為每個結點的鏈域的個數(shù)。這樣,管理相對簡化了,但會造成空間的浪費,因為有許多的結點存在空鏈域。2二叉樹及其基本性質1)二叉樹的定義二叉樹的特點:l非空二叉樹只有一個根結點l每一個結點最多只有兩個子結點,且結點分左右。則一個結點最多可以有兩棵子樹,分別稱為左子樹和右子樹在二叉樹中,每一個結點的度最大為2,即二叉樹的度為2。在二叉樹中,任何的子樹也均為二叉樹。在二叉樹中,每一個結點的子樹被分為左子樹和右子樹。在二叉樹中,允許某一個結點只有左子樹或只有右子樹。如果一個結點既沒有左子樹,也沒有右子樹,則該結點為葉子結點。2)二叉樹的性質性質1:在二叉樹的第k層上,最多有2k-1(k1)個結點。性質2:深度為m的二叉樹最多有2m-1個結點。性質3:在任意一棵二叉樹中,度為0的結點(即葉子結點)總比度為2的結點多一個。性質4:具有n個結點的二叉樹,其深度至少為log2n+1,其中l(wèi)og2n表示log2n的整數(shù)部分。3)滿二叉樹與完全二叉樹(1)滿二叉樹滿二叉樹的特點:除最后一層外,每一層上的所有結點都有兩個子結點。即在滿二叉樹中,每一層上的結點數(shù)都達到最大值,即在滿二叉樹上的第k層上有2k-1個結點。如下即為一棵滿二叉樹。(2)完全二叉樹特點:除最后一層外,每一層上的結點數(shù)均達到最大值,在最后一層上只缺少右邊的若干個結點。即如果從根結點開始,對二叉樹的結點自上而下、自左而右用自然數(shù)進行連續(xù)編號,則深度為m、且有n個結點的二叉樹,當且僅當其每一個結點都與深度為m的滿二叉樹中編號從1到n的結點一一對應,則是完全二叉樹。對于完全二叉樹,葉子結點只能在層次最大的兩層中出現(xiàn);對于任何一個結點,若其右分支下的子樹結點的最大層次為p,則其分支下的子孫結點的最大層次為p或p+1。完全二叉樹具有的性質:性質5:具有n個結點的完全二叉樹的深度為log2n+1性質6:設完全二叉樹共有n個結點。如果從根結點開始,按層次(每一層從左到右)用自然數(shù)1、2、n給結點編號,對于編號為k(k=1,2,n)的結點有如下結論: 若k=1,則該結點為根結點,它沒有父結點;若k1,則該結點的父結點編號為INT(k/2)。 若2kn,則編號為k的結點的左子結點編號為2k;否則該結點無左子結點(當然也沒有右子結點) 若2k+1n,則編號為k的結點的右子結點編號為2k+1;否則該結點無右子結點。3二叉樹的存儲結構二叉樹的存儲常采用鏈式存儲結構。存儲二叉樹中各元素的存儲結點由兩個部分組成:數(shù)據(jù)域和指針域。在二叉樹中,由于每個結點可有兩個子結點,則它的指針域有兩個:一個用于存儲該結點的左子結點的存儲地址,即稱為左指針域;一個用于存儲指向該結點的右子結點的存儲地址,稱為右指針域。存儲結構如下:LchildValueRchildiL(i)V(i)R(i)即二叉樹的存儲結構中每一個存儲結點都有兩個指針域,因此,二叉樹的鏈式存儲結構也稱為二叉樹的鏈表。在二叉樹在存儲中,用一個頭指針指向二叉樹的根結點的存儲地址。如圖所示的二叉樹:如果我們將該二叉樹的所有結點順序編號,順序存放在存儲空間里,則它們在內(nèi)存空間中的存放方式是:iL(i)V(i)R(i)BT12A324B536C748D9510E11612F13714G15816H17918I0100J0110K0120L0130M0140N0150O0160P0170Q0180R0當然,對于滿二叉樹或完全二叉樹而言,也可采用順序存儲的方式,但順序存儲的方式不適合其他的二叉樹。4二叉樹的遍歷二叉樹的遍歷即是不重復地訪問二叉樹的所有結點。在遍歷二叉樹時,一般先遍歷左子樹,然后再遍歷右子樹。在先左后右的原則下,二叉樹的遍歷又可分為三種:前序遍歷、中序遍歷和后序遍歷。1)前序遍歷前序遍歷即先訪問根結點,然后遍歷左子樹,最后遍歷右子樹。在遍歷左子樹和遍歷右子樹時,依然是先遍歷根結點,然后是左子樹,再是右子樹。操作的具體方式:l若二叉樹為空,則結束返回。l否則:訪問根結點前序遍歷左子樹前序遍歷右子樹如上圖所示的完全二叉樹,它的前序遍歷結果是:A、B、D、H、P、Q、I、R、E、J、K、C、F、L、M、G、N、O2)中序遍歷中序遍歷,即先遍歷左子樹,然后訪問根結點,最后是遍歷右子樹。具體的操作方式:l若二叉樹為空,則結束返回。l否則:中序遍歷左子樹訪問根結點 中序遍歷右子樹這里強調,在遍歷左子樹和右子樹時,仍然要采用中序遍歷的方法。如上圖所示的完全二叉樹,它的中序遍歷結果是:P、H、Q、D、R、I、B、J、E、K、A、L、F、M、C、N、G、O3)后序遍歷后序遍歷,即選遍歷左子樹,然后是遍歷右子樹,最后訪問根結點。具體的操作方式:l若二叉樹為空,則結束返回。l否則:前序遍歷左子樹前序遍歷右子樹訪問根結點如上圖所示的完全二叉樹,它的后序遍歷結果是:P、Q、H、R、I、D、J、K、E、B、L、M、F、N、O、G、C、A(七)查找技術查找即是指在一個給定的數(shù)據(jù)結構中查找某個指定的元素。1順序查找順序查找又稱順序搜索。一般是在線性表中查找指定的元素。基本操作方法是:從線性表的第一個元素開始,與被查元素進行比較,相等則查找成功,否則繼續(xù)向后查找。如果所有的元素均查找完畢后都不相等,則該元素在指定的線性表中不存在。順序查找的最好情況:要查找的元素在線性表的第一個元素,則查找效率最高;如果要查找的元素在線性表的最后或根本不存在,則查找需要搜索所有的線性表元素,這種情況是最差情況。對于線性表而言,順序查找效率很低。但對于以下的線性表,也只能采用順序查找的方法:l線性表為無序表,即表中的元素沒有排列不是按大小順序進行排列的,這類線性表不管它的存儲方式是順序存儲還是鏈式存儲,都只能按順序查找方式進行查找l即使是有序線性表,如果采用鏈式存儲,也只能采用順序查找方式例如,現(xiàn)有線性表:7、2、1、5、9、4,要在序列中查找元素6,查找的過程是:l整個線性表的長度為5l查找計次n=1,將元素6與序列的第一個7元素進行比較,不等,繼續(xù)查找ln=2,將6與第二個元素2進行比較,不等,繼續(xù)ln=3,將6與第三個元素1進行比較,不等,繼續(xù)ln=4,將6與第四個元素5進行比較,不等,繼續(xù)ln=5,將6與第五個元素9進行比較,不等,繼續(xù)ln=6,將6與第六個元素4進行比較,不等,繼續(xù)ln=7,超出線性表的長度,查找結束,則該表中不存在要查找的元素。2二分查找二分查找只適用于順序存儲的有序表。此處所述的有序表是指線性中的元素按值非遞減排列(即由小到大,但允許相鄰元素值相等)。二分查找的方法如下:將要查找的元素與有序序列的中間元素進行比較:l如果該元素比中間元素大,則繼續(xù)在線性表的后半部分(中間項以后的部分)進行查找l如果要查找的元素的值比中間元素的值小,則繼續(xù)在線性表的前半部分(中間項以前的部分)進行查找這個查找過程一直按相同的順序進行下去,一直到查找成功或子表長度為0(說明線性表中沒有要查找的元素)有序線性表的二分法查找,條件是必須這個有序線性表的存儲方式是順序存儲的。它的查找效率比順序查找要高得多,它的最壞情況的查找次數(shù)是log2n次,而順序查找的最壞情況的查找次數(shù)是n次。當然,二分查找的方法也支持順序存儲的遞減序列的線性表。有非遞減有序線性表:1、2、4、5、7、9,要查找元素6。查找的方法是:l序列長度為n=6,中間元素的序號m=(n+1)/2=3l查找計次k=1,將元素6與中間元素即元素4進行比較,不等,64l查找計次k=2,查找繼續(xù)在后半部分進行,后半部分子表的長度為3,計算中間元素的序號:m=3+(3+1)/2=5,將元素與后半部分的中間項進行比較,即第5個元素中的7進行比較,不等,67l查找計次k=3,繼續(xù)查找在后半部分序列的前半部分子序列中查找,子表長度為1,則中間項序號即為m=3+(1+1)/2=4,即與第4個元素5進行比較,不相等,繼續(xù)查找的子表長度為0,則查找結束(八)排序技術排序即是將一個無序的序列整理成按值非遞減順序排列的有序序列。在這里,我們討論的是順序存儲的線性表的排序操作。1交換類排序法交換類排序法,即是借助于數(shù)據(jù)元素之間的互相交換進行排序的方法。1)冒泡排序法冒泡排序法即是利用相鄰數(shù)據(jù)元素之間的交換逐步將線性表變成有序序列的操作方法。操作過程如下:l從表頭開始掃描線性表,在掃描過程中逐次比較相鄰兩個元素的大小,若相鄰兩個元素中前一個元素的值比后一個元素的值大,將兩個元素位置進行交換,當掃描完成一遍時,則序列中最大的元素被放置到序列的最后。l再繼續(xù)對序列從頭進行掃描,這一次掃描的長度是序列長度減1,因為最大的元素已經(jīng)就位了,采用與前相同的方法,兩兩之間進行比較,將次大數(shù)移到子序列的末尾。l按相同的方法繼續(xù)掃描,每次掃描的子序列的長度均比上一次減1,直至子序列的長度為1時,排序結束。例如,有序列5、2、9、4、1、7、6,將該序列從小到大進行排列。采用冒泡排序法,具體操作步驟如下:序列長度n=7原序列5294176第一遍(從前往后)52941762594176254917623419762541796第一遍結束后2541769第二遍(從前往后)2541769245176924157692415679第二遍結束后2415679第三遍(從前往后)24156792145679第三遍結束2145679第四遍(從前往后)21456791245679第四遍結束1245679最后結果1245679掃描的次數(shù),最多需要掃描n-1次,如果序列已經(jīng)就位,則掃描結束。測試是否已經(jīng)就位,可設置一個標志,如果該次掃描沒有數(shù)據(jù)交換,則說明數(shù)據(jù)排序結束。2)快速排序法冒泡排序方法每次交換只能改變相鄰兩個元素之間的逆序,速度相對較慢。如果將兩個不相鄰的元素之間進行交換,可以消除多個逆序??焖倥判虻姆椒ㄊ牵簭木€性表中選取一個元素,設為T,將線性表后面小于T的元素移到前面,而前面大于T的元素移到后面,結果將線性表分成兩個部分(稱為兩個子表),T插入到其分界線的位置處,這個過程稱為線性表的分割。對過對線性表的一次分割,就以T為分界線,將線性表分成前后兩個子表,且前面子表中的所有元素均不大于T,而后面的所有元素均不小于T。再將前后兩個子表再進行相同的快速排序,將子表再進行分割,直到所有的子表均為空,則完成快速排序操作。在快速排序過程中,隨著對各子表不斷的進行分割,劃分出的子表會越來越多,但一次又只能對一個子表進行分割處理,需要將暫時不用的子表記憶起來,這里可用棧來實現(xiàn)。對某個子表進行分割后,可以將分割出的后一個子表的第一個元素與最后一個元素的位置壓入棧中,而繼續(xù)對前一個子表進行再分割;當分割出的子表為空時,可以從棧中退出一個子表進行分割。這個過程直到棧為空為止,說明所有子表為空,沒有子表再需分割,排序就完成。2插入類排序法1)簡單插入排序插入排序,是指將無序序列中的各元素依次插入到已經(jīng)有序的線性表中。插入排序操作的思路:在線性表中,只包含第1個元素的子表,作為該有序表。從線性表的第2個元素開始直到最后一個元素,逐次將其中的每一個元素插入到前面的有序的子表中。該方法與冒泡排序方法的效率相同,最壞的情況下需要n(n-1)/2次比較。例如,有序列5、2、9、4、1、7、6,將該序列從小到大進行排列。采用簡單插入排序法,具體操作步驟如下:序列長度n=75294176j=22594176j=32594176j=42459176j=51245976j=61245796j=7插入排序后的結果12456792)希爾排序法希爾排序法的基本思想:將整個無序序列分割成若干小的子序列分別進行插入排序。子序列的分割方法:將相隔某個增量h的元素構成一個子序列,在排序的過程中,逐次減小這個增量,最后當h減小到1時,再進行一次插入排序操作,即完成排序。增量序列一般取ht=n/2k(k=1,2,log2n),其中n為待排序序列的長度。3選擇類排序法1)簡單選擇排序法基本思路:掃描整個線性表,從中選出最小的元素,將它交換到表的最前面,然后對后面的子表采用相同的方法,直到子表為空為止。對于長度為n的序列,需要掃描n-1次,每一次掃描均找出剩余的子表中最小的元素,然后將該最小元素與子表的第一個元素進行交換。例如,有序列5、2、9、4、1、7、6,將該序列從小到大進行排列。采用簡單選擇排序法,具體操作步驟如下:原序列5294176第一遍掃描1294576第二遍掃描1294576第三遍掃描1249576第四遍掃描1245976第五遍掃描1245679第六遍掃描1245679排序結果12456792)堆排序法堆排序法屬于選擇類排序方法。堆的定義:具有n個元素的序列(h1,h2,hn),當且僅當滿足 (I=1,2,n/2)時稱之為堆。本節(jié)只討論滿足前者條件的堆。由堆的定義看,堆頂元素(即第一個元素)必為最大項。可以用一維數(shù)組或完全二叉樹來表示堆的結構。用完全二叉樹表示堆時,樹中所有非葉子結點值均不小于其左右子樹的根結點的值,因此堆頂(完全二叉樹的根結點)元素必須為序列的n個元素中的最大項。例如,有序列5、2、9、4、1、7、6,將該序列從小到大進行排列。利用堆排序法將該序列進行排序。操作方式即:先將無序堆的根結點5與左右子樹的根結點2、9進行比較,59,將5與9進行交換;整后,對左右子樹進行堆調整,左子樹的根結點2小于其左葉子結點5,調整;右子樹的根結點5小于其左右子結點7和6,根據(jù)堆的要求,將5與7進行調整。根據(jù)堆的定義,可以得到堆排序的方法:(1)首先將一個無序序列建成堆(2)然后將堆頂元素(序列中的最大項)與堆中最后一個元素交換(最大項應該在序列的最后)。三、本章應考點撥本章內(nèi)容在筆試中會出現(xiàn)5-6個題目,是公共基礎知識部分出題量比較多的一章,所占分值也比較大,約10分。第二章 程序設計基礎一、內(nèi)容要點(一)程序設計方法與風格程序設計方法:主要經(jīng)過了面向過程的結構化程序設計和面向對象的程序設計方法。程序設計風格,是指編寫程序時所表現(xiàn)出來的特點、習慣和邏輯思路。通常,要求程序設計的風格應強調簡單和清晰,必須是可以讀的,可以理解的。要形成良好的程序設計的風格,應考慮如下因素:1源程序文檔化(1)符號名的命名:符號名的命名要具有一定的實際含義,便于對程序的理解,即通常說的見名思義;(2)程序注釋:正確的程序注釋能夠幫助他人理解程序。注釋一般包括序言性注釋和功能性注釋;(3)視覺組織:為了使程序一目了然,可以對程序的格式進行設置,適當?shù)赝ㄟ^空格、空行、縮進等使程序層次清晰。2數(shù)據(jù)說明方法(1)數(shù)據(jù)說明的次序規(guī)范化;(2)說明語句中變量安排有序化;(3)使用注釋來說明復雜的數(shù)據(jù)結構。3語句的結構(1)在一行內(nèi)只寫一條語句;(2)程序的編寫應該優(yōu)先考慮清晰性;(3)除非對效率有特殊的要求,否則,應做到清晰第一,效率第二;(4)首先保證程序的正確,然后再要求速度;(5)避免使用臨時變量使程序的可讀性下降;(7)盡量使用庫函數(shù),即盡量使用系統(tǒng)提供的資源;(8)避免采用復雜的條件語句;(9)盡量減少使用“否定”條件的條件語句;(10)數(shù)據(jù)結構要有利于程序的簡化;(11)要模塊化,使模塊功能盡可能單一化;(12)利用信息隱蔽,確保每一個模塊的獨立性;(13)從數(shù)據(jù)出發(fā)去構造程序;(14)不要修補不好的程序,要重新編寫。4輸入和輸出(1)對所有的輸入輸出數(shù)據(jù)都要檢驗數(shù)據(jù)的合法性;(2)檢查輸入項的各種重要組合的合理性;(3)輸入格式要簡單,以使得輸入的步驟和操作盡可能簡單;(4)輸入數(shù)據(jù)時,應允許自由格式;(5)應允許缺省值;(6)輸入一批數(shù)據(jù)時,最好使用輸入結束標志;(7)以交互式輸入輸出方式進行輸入時,要在屏幕上使用提示符明確輸入的請求,同時在數(shù)據(jù)輸入過程中和輸入結束時,應在屏幕上給出狀態(tài)信息;(8)當程序設計語言對輸入格式有嚴格要求時,應保持輸入格式與輸入語句的一致性;給所有的輸出加注釋,并設計輸出報表格式。(二)結構化程序設計1結構化程序設計的原則結構化程序設計方法的主要原則:自頂而下、逐步求精,模塊化,限制使用goto語句。1)自頂而下程序設計時,應先考慮總體,后考慮細節(jié);先考慮全局,后考慮局部目標。即先從最上層總目標開始設計,逐步使問題具體化。2)逐步求精對復雜問題,應設計一些子目標作為過渡,逐步細化。3)模塊化一個復雜問題,都是由若干個稍簡單的問題構成的。模塊化即是將復雜問題進行分解,即將解決問題的總目標分解成若干個分目標,再進一步分解為具體的小目標,把每一個小目標稱作一個模塊。4)限制使用goto語句goto語句可以提高效率,但對程序的可讀性、維護性都造成影響,因此應盡量不用goto語句。2結構化程序設計的基本結構與特點結構化程序設計是程序設計的先進方法和工具,采用結構化程序設計可以使程序結構良好、易讀、易理解、易維護。1)順序結構順序結構即是順序執(zhí)行的結構,是按照程序語句行的自然順序,一條一條語句地執(zhí)行程序。2)選擇結構選擇結構又稱分支結構,它包括簡單選擇和多分支選擇結構。程序的執(zhí)行是根據(jù)給定的條件,選擇相應的分支來執(zhí)行。3)重復結構重復結構又稱循環(huán)結構,根據(jù)給定的條件,決定是否重復執(zhí)行某一相同的或類似的程序段。利用重復結構可以大量簡化程序行。3結構化程序設計原則和方法的應用1使用程序設計語言中的順序、選擇、循環(huán)等有限的控制結構表示程序的控制邏輯;2選用的控制結構只允許有一個入口和一個出口;3程序語句組成容易識別的塊,每塊只有一個入口和一個出口;4復雜結構應該用嵌套的基本控制結構進行組合嵌套來實現(xiàn);5語言中所有沒有的控制結構,應該采用前后一致的方法來模擬;6嚴格控制goto語句的使用:(1)用一個非結構化的程序設計語言去實現(xiàn)一個結構化的構造;(2)若不使用goto語句會使功能模糊;(3)在某種可以改善而不是損害程序可讀性的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 剛做完的數(shù)學試卷
- 費縣期末考試六上數(shù)學試卷
- 肝性昏迷的護理
- 肥城初一數(shù)學試卷
- 福建漳州數(shù)學試卷
- 高考的文科的數(shù)學試卷
- 廣安中考數(shù)學試卷
- 東北中學六年級數(shù)學試卷
- 個性化購物輔助工具開發(fā)考核試卷
- 燈湖中學月考數(shù)學試卷
- 2025-2030中國全麥粉市場銷售狀況與競爭前景分析報告
- 2025至2030中國醫(yī)藥軟包裝行業(yè)市場發(fā)展分析及競爭格局與投資發(fā)展報告
- 主語從句超全課件
- 《Unit 6 Changing for the seasons》教案-2024-2025學年人教PEP版(2024)小學英語四年級上冊
- 天津醫(yī)院節(jié)能管理制度
- 2025年中國氯化聚醚項目投資計劃書
- 軟件服務運維合同范本
- 無創(chuàng)血流動力學監(jiān)測
- DB37-T5311-2025建筑工程消防設計文件編制標準
- 成都市高新區(qū)2023年七年級《歷史》下冊期末試卷與參考答案
- 中國上市銀行2024年回顧及未來展望-安永-202505
評論
0/150
提交評論