




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)與簡單算法廣東汕頭華僑中學(xué) 歐陽玲用計(jì)算機(jī)解決問題一般步驟:具體問題數(shù)學(xué)模型算法編程、調(diào)試得到答案一般來說,用計(jì)算機(jī)解決一個(gè)具體問題時(shí),大致經(jīng)過以下幾個(gè)步驟:首先要從具體問題抽象出一個(gè)適當(dāng)?shù)臄?shù)學(xué)模型,然后設(shè)計(jì)一個(gè)解此數(shù)學(xué)模型的算法,最后編出程序進(jìn)行測試調(diào)整知道的到最終解答。尋求數(shù)學(xué)模型的實(shí)質(zhì)就是分析問題,從中提取操作的對象,并找出這些操作對象之間含有的關(guān)系,然后用數(shù)學(xué)的語言加以描述。三種經(jīng)典的數(shù)學(xué)模型圖書書目自動檢索系統(tǒng)線性關(guān)系博弈問題樹城市道路問題圖數(shù)據(jù)結(jié)構(gòu)(data structure)簡單的解釋:相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。數(shù)據(jù)間的聯(lián)系有邏輯關(guān)系、存儲聯(lián)系,通
2、常的數(shù)據(jù)結(jié)構(gòu)指的是邏輯結(jié)構(gòu)。 前面提到的三種經(jīng)典的數(shù)學(xué)模型體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)的基本結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)通常有如下四種關(guān)系:(1)集合結(jié)構(gòu) (2)線性結(jié)構(gòu) (3)樹形結(jié)構(gòu) (4)圖狀結(jié)構(gòu) 線性表(一)N個(gè)數(shù)據(jù)元素的有限序列存儲結(jié)構(gòu):順序存儲結(jié)構(gòu)、鏈?zhǔn)酱鎯Y(jié)構(gòu)(1)(2)(3)(4)(5)(6)(7)(8)1213152234384320當(dāng)需要在順序存儲的線性表中插入一個(gè)數(shù)據(jù)元素時(shí),需要順序移動后續(xù)的元素以“騰”出某個(gè)合適的位置放置新元素。刪除元素呢? 線性表(二)鏈?zhǔn)酱鎯Σ迦胄略氐臅r(shí)候只需要改變指針?biāo)赶虻牡刂贰?二維數(shù)組與線性表如果某一線性表,它的每一個(gè)數(shù)據(jù)元素分別是一個(gè)線性表,這樣的二維表在數(shù)據(jù)實(shí)現(xiàn)
3、上通常使用二維數(shù)組。二維數(shù)組的一個(gè)形象比喻多個(gè)縱隊(duì)形成的方塊 m * n 數(shù)組地址計(jì)算問題題目描述:已知N*(N+1) / 2個(gè)數(shù)據(jù),按行的順序存入數(shù)組b1,b2,中。其中第一個(gè)下標(biāo)表示行,第二個(gè)下標(biāo)表示列。若aij (i>=j ,j=1,2,n)存于bk中,問:k,i,j之間的關(guān)系如何表示?給定k值,寫出能決定相應(yīng)i,j的算法。答案 K=i*(i-1)/2+j Read(k);For i:=1 to k do for j:=1 to i do if k=(trunc(I*(I-1)/2)+j) then writeln(k,對應(yīng)的i,j為:,i,j) 棧特殊的線性表操作特點(diǎn):后進(jìn)先出(
4、Last In First Out)棧頂表尾棧底表頭空棧 棧 (考題分析)(1998) 棧S初始狀態(tài)為空,現(xiàn)有5個(gè)元素組成的序列1,2,3,4,5,對該序列在棧S上一次進(jìn)行如下操作(從序列中的1開始,出棧后不再進(jìn)棧):進(jìn)棧、進(jìn)棧、進(jìn)棧、出棧、進(jìn)棧、出棧、進(jìn)棧。問出棧的元素序列是_D(A) 5,4,3,2,1 (B) 2,1 (C) 2,3 (D) 3,4 隊(duì)列先進(jìn)先出允許插入的一端稱為隊(duì)尾(rear),允許刪除的一端稱為隊(duì)頭(front)。 循環(huán)隊(duì)列頭指針指向隊(duì)列中隊(duì)頭元素的前一個(gè)位置,尾指針指示隊(duì)尾元素在隊(duì)列中的當(dāng)前位置。(R-F+N) mod N 樹根、葉子、子樹結(jié)點(diǎn)的度:結(jié)點(diǎn)擁有的子樹數(shù)
5、二叉樹 二叉樹特點(diǎn):每個(gè)結(jié)點(diǎn)至多只有二棵子樹,并且二叉樹的子樹有左右之分。第i層至多有 2i-1 個(gè)結(jié)點(diǎn)(i>=1)深度為K的二叉樹最多有 2k-1 個(gè)結(jié)點(diǎn)(K>=1) 二叉樹的遍歷先(根)序遍歷ABDFGCEH中(根)序遍歷BFDGACHE后(根)序遍歷FGDBHECA 例題分析給出一棵二叉樹的中序遍歷:DBGEACHFI 與后序遍歷:DGEBHIFCA ,畫出此二叉樹。 圖 圖的存儲結(jié)構(gòu)鄰接矩陣有向圖、無向圖、帶權(quán)圖的鄰接矩陣 排序冒泡排序選擇排序快速排序希爾排序一、插入排序(Insertion Sort)1. 基本思想: 每次將一個(gè)待排序的數(shù)據(jù)元素,插入到前面已經(jīng)排好序的數(shù)列
6、中的適當(dāng)位置,使數(shù)列依然有序;直到待排序數(shù)據(jù)元素全部插入完為止。2. 排序過程: 【示例】:初始關(guān)鍵字 49 38 65 97 76 13 27 49 J=2(38) 38 49 65 97 76 13 27 49 J=3(65) 38 49 65 97 76 13 27 49 J=4(97) 38 49 65 97 76 13 27 49 J=5(76) 38 49 65 76 97 13 27 49 J=6(13) 13 38 49 65 76 97 27 49 J=7(27) 13 27 38 49 65 76 97 49 J=8(49) 13 27 38 49 49 65 76 97
7、Procedure InsertSort(Var R : FileType);/對R1.N按遞增序進(jìn)行插入排序, R0是監(jiān)視哨/ Begin for I := 2 To N Do /依次插入R2,.,Rn/ begin R0 := RI; J := I - 1; While R0 < RJ Do /查找RI的插入位置/ begin RJ+1 := RJ; /將大于RI的元素后移/ J := J - 1 end RJ + 1 := R0 ; /插入RI / end End; /InsertSort /二、選擇排序1. 基本思想:每一趟從待排序的數(shù)據(jù)元素中選出最?。ɑ蜃畲螅┑囊粋€(gè)元素,順序放
8、在已排好序的數(shù)列的最后,直到全部待排序的數(shù)據(jù)元素排完。2. 排序過程: 【示例】: 初始關(guān)鍵字 49 38 65 97 76 13 27 49第一趟排序后 13 38 65 97 76 49 27 49第二趟排序后 13 27 65 97 76 49 38 49第三趟排序后 13 27 38 97 76 49 65 49第四趟排序后 13 27 38 49 49 97 65 76第五趟排序后 13 27 38 49 49 97 97 76第六趟排序后 13 27 38 49 49 76 76 97第七趟排序后 13 27 38 49 49 76 76 97最后排序結(jié)果 13 27 38 49
9、49 76 76 97Procedure SelectSort(Var R : FileType); /對R1.N進(jìn)行直接選擇排序 / Begin for I := 1 To N - 1 Do /做N - 1趟選擇排序/ begin K := I; For J := I + 1 To N Do /在當(dāng)前無序區(qū)RI.N中選最小的元素RK/ begin If RJ < RK Then K := J end; If K <> I Then /交換RI和RK / begin Temp := RI; RI := RK; RK := Temp; end; end End; /Select
10、Sort /三、冒泡排序(BubbleSort)1. 基本思想:兩兩比較待排序數(shù)據(jù)元素的大小,發(fā)現(xiàn)兩個(gè)數(shù)據(jù)元素的次序相反時(shí)即進(jìn)行交換,直到?jīng)]有反序的數(shù)據(jù)元素為止。2. 排序過程:設(shè)想被排序的數(shù)組R1.N垂直豎立,將每個(gè)數(shù)據(jù)元素看作有重量的氣泡,根據(jù)輕氣泡不能在重氣泡之下的原則,從下往上掃描數(shù)組R,凡掃描到違反本原則的輕氣泡,就使其向上"漂浮",如此反復(fù)進(jìn)行,直至最后任何兩個(gè)氣泡都是輕者在上,重者在下為止。 【示例】:49 13 13 13 13 13 13 13 38 49 27 27 27 27 27 2765 38 49 38 38 38 38 3897 65 38 4
11、9 49 49 49 4976 97 65 49 49 49 49 4913 76 97 65 65 65 65 6527 27 76 97 76 76 76 7649 49 49 76 97 97 97 97 Procedure BubbleSort(Var R : FileType) /從下往上掃描的起泡排序/Begin For I := 1 To N-1 Do /做N-1趟排序/ begin NoSwap := True; /置未排序的標(biāo)志/ For J := N - 1 DownTo 1 Do /從底部往上掃描/ begin If RJ+1< RJ Then /交換元素/ beg
12、in Temp := RJ+1; RJ+1 := RJ; RJ := Temp; NoSwap := False end; end; If NoSwap Then Return/本趟排序中未發(fā)生交換,則終止算法/ endEnd; /BubbleSort/四、快速排序(Quick Sort)1. 基本思想:在當(dāng)前無序區(qū)R1.H中任取一個(gè)數(shù)據(jù)元素作為比較的"基準(zhǔn)"(不妨記為X),用此基準(zhǔn)將當(dāng)前無序區(qū)劃分為左右兩個(gè)較小的無序區(qū):R1.I-1和RI+1.H,且左邊的無序子區(qū)中數(shù)據(jù)元素均小于等于基準(zhǔn)元素,右邊的無序子區(qū)中數(shù)據(jù)元素均大于等于基準(zhǔn)元素,而基準(zhǔn)X則位于最終排序的位置上,即R
13、1.I-1X.KeyRI+1.H(1IH),當(dāng)R1.I-1和RI+1.H均非空時(shí),分別對它們進(jìn)行上述的劃分過程,直至所有無序子區(qū)中的數(shù)據(jù)元素均已排序?yàn)橹埂?. 排序過程: 【示例】:初始關(guān)鍵字 49 38 65 97 76 13 27 49第一次交換后 27 38 65 97 76 13 49 49 第二次交換后 27 38 49 97 76 13 65 49 J向左掃描,位置不變,第三次交換后 27 38 13 97 76 49 65 49 I向右掃描,位置不變,第四次交換后 27 38 13 49 76 97 65 49J向左掃描 27 38 13 49 76 97 65 49(一次劃分過
14、程) 初始關(guān)鍵字 49 38 65 97 76 13 27 49一趟排序之后 27 38 13 49 76 97 65 49 二趟排序之后 13 27 38 49 49 6576 97三趟排序之后 13 27 38 49 49 6576 97最后的排序結(jié)果 13 27 38 49 49 65 76 97 各趟排序之后的狀態(tài)Procedure Parttion(Var R : FileType; L, H : Integer; Var I : Integer);/對無序區(qū)R1,H做劃分,I給以出本次劃分后已被定位的基準(zhǔn)元素的位置 /Begin I := 1; J := H; X := RI ;/
15、初始化,X為基準(zhǔn)/ Repeat While (RJ >= X) And (I < J) Do begin J := J - 1 /從右向左掃描,查找第1個(gè)小于 X的元素/ If I < J Then /已找到RJ X/ begin RI := RJ; /相當(dāng)于交換RI和RJ/ I := I + 1 end; While (RI <= X) And (I < J) Do I := I + 1 /從左向右掃描,查找第1個(gè)大于 X的元素/ end; If I < J Then /已找到RI > X / begin RJ := RI; /相當(dāng)于交換RI和RJ
16、/ J := J - 1 end Until I = J; RI := X /基準(zhǔn)X已被最終定位/End; /Parttion /Procedure QuickSort(Var R :FileType; S,T: Integer); /對RS.T快速排序/Begin If S < T Then /當(dāng)RS.T為空或只有一個(gè)元素是無需排序/ begin Partion(R, S, T, I); /對RS.T做劃分/ QuickSort(R, S, I-1);/遞歸處理左區(qū)間RS,I-1/ QuickSort(R, I+1,T);/遞歸處理右區(qū)間RI+1.T / end;End; /Quick
17、Sort/五、堆排序(Heap Sort)1. 基本思想: 堆排序是一樹形選擇排序,在排序過程中,將R1.N看成是一顆完全二叉樹的順序存儲結(jié)構(gòu),利用完全二叉樹中雙親結(jié)點(diǎn)和孩子結(jié)點(diǎn)之間的內(nèi)在關(guān)系來選擇最小的元素。2. 堆的定義: N個(gè)元素的序列K1,K2,K3,.,Kn.稱為堆,當(dāng)且僅當(dāng)該序列滿足特性:KiK2i Ki K2i+1(1 I N/2)六、幾種排序算法的比較和選擇 1. 選取排序方法需要考慮的因素:(1) 待排序的元素?cái)?shù)目n;(2) 元素本身信息量的大??;(3) 關(guān)鍵字的結(jié)構(gòu)及其分布情況;(4) 語言工具的條件,輔助空間的大小等。2. 小結(jié):(1) 若n較小(n <= 50),則可以采用直接插入排序或直接選擇排序。由于直接插入排序所需的記錄移動操作較直接選擇排序多,因而當(dāng)記錄本身信息量較大時(shí),用直接選擇排序較好。(2) 若文件的初始狀態(tài)已按關(guān)鍵字基本有序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園活動:梯形探秘
- 年度化驗(yàn)室工作總結(jié)模版
- 小學(xué)及初中暑假防溺水安全教育專題會議
- 冠狀動脈痙攣的臨床護(hù)理
- 農(nóng)機(jī)駕駛員培訓(xùn)與春耕安全保障
- PEP小學(xué)英語六年級上冊知識點(diǎn)總結(jié)模版
- 《餐飲集團(tuán)人才招募》課件
- 《客戶關(guān)系管理軟件應(yīng)用》課件
- 2025年小學(xué)學(xué)雷鋒演講比賽活動的工作總結(jié)模版
- 2025標(biāo)準(zhǔn)技術(shù)轉(zhuǎn)讓合同范本
- 2023年廣西物流職業(yè)技術(shù)學(xué)院教師招聘考試筆試題庫及答案
- 湖北省天門市2024屆中考聯(lián)考生物試題含解析
- 居民自建樁安裝告知書回執(zhí)
- 廣佛環(huán)線佛山西站至廣州北站段項(xiàng)目輸電線路遷改工程環(huán)境影響報(bào)告表
- 火龍罐技術(shù)課件
- 小學(xué)英語四年級下冊Unit 1 Part B Read and write教學(xué)設(shè)計(jì)2
- 風(fēng)電場專用箱式變電站技術(shù)要求編制說明
- 社會沖突理論課件
- (21)-9.1《藝術(shù)學(xué)概論》第九章第一節(jié) 藝術(shù)批評的含義與性質(zhì)、原
- 部編版語文八年級下冊第五單元游記散文閱讀練習(xí)(含解析)
- GB/T 42602-2023大型鍛鋼件的鍛造規(guī)范
評論
0/150
提交評論