版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1,資料結(jié)構(gòu)(用C語言,資訊工程學(xué)系 王家輝 .tw 資訊工程學(xué)系 .tw/wangch,2,課程目標,資料結(jié)構(gòu)是資訊科學(xué)學(xué)門中的核心課程,而本課程主要在介紹各種型態(tài)資料結(jié)構(gòu)在C程式語言中的呈現(xiàn),以及和演算法的關(guān)係。 修習(xí)本課程的同學(xué),除了學(xué)到常用的資料表現(xiàn)方式之外,如何在設(shè)計C程式時選取合適的資料結(jié)構(gòu)、配合適當?shù)难菟惴?、和評估所採用的資料結(jié)構(gòu)的優(yōu)缺點等都是本課程的重點,3,課程大綱與進度,程式設(shè)計基本概念與C程式語言基本認識 C程式語言組成 資料型態(tài)、運算子、流程控制指令 函數(shù)、指標、陣列與結(jié)構(gòu)) 輸入/輸出與檔案處理)
2、演算法的規(guī)格,資料抽象化與程式的複雜度分析 Array(陣列)與Structure(結(jié)構(gòu)) Stack(堆疊)與Queue(佇列) Linked List(串列) Tree(樹狀結(jié)構(gòu)) Graph(圖狀結(jié)構(gòu)) Sorting(排序) Hashing(雜湊結(jié)構(gòu)) Heap(堆積結(jié)構(gòu)) Searching(搜尋結(jié)構(gòu),4,參考書籍,Ellis Horowitz, Sarataj Sahni, Susan Anderson-freed, Fundamentals of data structures in C, W.H. Freeman and Company, New York,1993 Brian
3、 W. Kernighan, Dennis M. Ritchie, The C Programming Language, 2nd Ed., Printice-Hall, New Jersey, 1990,5,成績評量,平時成績(程式作業(yè))30% 期中考30% 期末考40,6,第一章資料結(jié)構(gòu)基本觀念,資訊工程學(xué)系,7,系統(tǒng)的生命週期System Life Cycle,需求(Requirement) 一整套規(guī)格(A set of specifications) 所需之輸入及輸出(Inputs and Outputs) 分析(Analysis) 將問題分割成可以掌握的小問題 有兩種分析方式 由下而
4、上(bottom-up) 由草圖一磚一瓦的蓋房子 由上而下(top-down) 由程式最終要完成目標開始 設(shè)計組織及流程圖(將程式分割成可管控的單元,8,系統(tǒng)的生命週期System Life Cycle,設(shè)計(Design) 抽象化的資料型態(tài)(e.g.選課系統(tǒng)) 演算法的方法與步驟 修正及程式設(shè)計(Refinement and Coding) 完成抽象化資料的實際表示 撰寫演算法的程式 驗證(Verification) 用理論證明該方法的正確性(Correctness Proofs) 費時 可參考別人已驗證過的演算法 測試(Testing) e.g. if and switch 除錯(Erro
5、r Removal,9,演算法的一般規(guī)格Algorithm Specification,想要利用電腦解決特定問題的方法及步驟, 輸入(Input) 需要提供0個以上數(shù)量的外在資料 輸出(Output) 至少要有一個以上的資料產(chǎn)出 確定性(Definiteness) 每一項方法及步驟是清楚而且不是模稜兩可的 有限性(Finiteness) 這個演算法一定要在有限的步驟內(nèi)完成 有效性(Effectiveness) 每一項方法及步驟是足夠簡單的可以完成(可以對應(yīng)到程式), 基本上用一支筆及一張紙就可以完整描述這個演算法, 也就是每一步驟是可行的,10,幾個範例Samples,選擇排序法(Select
6、ion Sort) 在未排序的數(shù)列中每次找出最小(最大)的,將最小(最大)的數(shù)值依序列出 二元搜尋法(Binary Search) 在已排序好的數(shù)列中找到是否存在某一筆數(shù)值,11,Selection Sort,一個簡單的方法將一連串正整數(shù)做由大到小或者由小到大的排列 從這些未排序的數(shù)列中一一找出最小,把它們依序置入一個排序的數(shù)列中 這樣的敘述不是一個演算法的正確描述 e.g.沒有告訴這些數(shù)列一開始如何儲存,還有結(jié)果到底要放到哪裡 我們嘗試用中英文和C語言夾雜著來描述這個演算法,12,氣泡排序法的演算法Selection Sort Algorithm,假設(shè)資料都放在個整數(shù)陣列, 名字為list,
7、 第i筆整數(shù)就放在 listi 中, 0=in for (i=0; i n; i+) Examine listi to listn-1 and suppose that the smallest integer is at listmin; Interchange listi and listmin; 完整程式 Program 1.3,13,Interchange listi and listmin;交換數(shù)列中兩筆資料,swap(,14,程式作業(yè)一,嘗試將課本program 1.3的selection sort(macro版)改成呼叫swap()函數(shù) 用MS Visual C(課本是用ANSI
8、 C)或用C+ 兩個版本的程式都要寫, 盡可能在每行程式附上註解 並盡可能說明這兩個版本的差異 截止日期(2/27) 程式嚴禁抄襲,發(fā)現(xiàn)抄襲者,與被抄襲者一律以零分計 。 將執(zhí)行檔、原始檔及文件壓縮成以學(xué)號為檔名的zip檔,並上傳至下列FTP站臺 0,15,二元搜尋法Binary Search,假設(shè)有n個整數(shù)(n=1), 它們已經(jīng)排序過, 而且放在一個整數(shù)型態(tài)的陣列中 list0=list1=listn-1 要從上述陣列中搜尋到searchnum這個整數(shù) 如果找到就傳回那個數(shù)值所在陣列中的索引位置 如果找不到就傳回 -1,16,二元搜尋法Binary Sear
9、ch,讓left, right兩個變數(shù)分別代表要搜尋數(shù)列範圍中最左邊及最右邊的索引位置 一開始的位置當然是 left = 0, right=n-1 讓另一個變數(shù) middle=(left+right)/2 假使我們比較 list middle和 searchnum, 可以發(fā)現(xiàn)下列三個現(xiàn)象 searchnum list middle searchnum應(yīng)該落在middle和right區(qū)間, 所以將left=middle+1 如果沒有找到,就要再將middle= (left+right)/2, 繼續(xù)前一步驟,直到?jīng)]有數(shù)列可以檢查為止,17,程式(program 1.6)中用到的比較函數(shù),巨集寫法
10、#define COMPARE(x,y) (x)(y) ? 1: (x) = (y) ? 0:1) conditional expression expr1?expr2:expr3 函數(shù)呼叫寫法 int compare (int x, int y) if(x y) return -1; else if (x=y) return 0; else return 1;,18,遞迴演算法Recursive Algorithms,直接遞迴(Direct Recursion) 一函數(shù)直接呼叫自己 二元搜尋法(binary search) 排列(permutation) 間接遞迴(Indirect Recu
11、rsion) A函數(shù)呼叫 B函數(shù),而B函數(shù)會再呼叫A函數(shù) Binary search and Permutation Program 1.7及program1.8 在第四章及第五章會有更多的討論,19,程式作業(yè)2,Page 14 Exercise 11 Tower of Hanoi 漢諾塔或梵天塔 截止日期 兩個星期後,20,資料抽象化Data Abstraction,C程式語言所提供的資料型態(tài)(data type) C本身已提供有char(字元), int(整數(shù)), float(浮點), double(雙精度浮點) 另外還有short(短整數(shù)), long(長整數(shù))及在基本型態(tài)還可以再加上關(guān)
12、鍵字 unsigned(非負)來做變化 將相同資料型態(tài)群組化, (array, 陣列) 將不一定相同的資料型態(tài)的資料集合起來(structure, 結(jié)構(gòu)) struct student char last_name; int student_id; char grade; C也提供了所謂指標資料型態(tài)(pointer) int i, *p,21,資料抽象化Data Abstraction,資料型態(tài)(data type)的定義 一些物件的集合加上包含在物體上可以操作的一套操作方法 抽象資料型態(tài)(abstract data type, ADT) 也是資料型態(tài), 而它被整理成物件的規(guī)格定義和在這些個物
13、件上操作方法的所有規(guī)格定義 在這些物件上所有的操作方法的定義規(guī)格是和物件的呈現(xiàn)及實際操作方法的製作是分開的 C是沒有明顯的語法機制來製作ADT, 但是可以用一樣的觀念來達成 C+(Class), ADA(package) 所以ADT可以是與實際製作無關(guān)的,22,資料抽象化Data Abstraction,ADT資料型態(tài)所包含的功能 產(chǎn)生者/建構(gòu)者(Creator/Constructor) 產(chǎn)生想要的資料型態(tài)的實體 轉(zhuǎn)換者(Transformer) 通常是要將一個或多個其他的資料型態(tài)實體轉(zhuǎn)換成一個新的資料型態(tài)實體 觀察者/記錄者(Observer/Reporter) 是提供資料型態(tài)實體的資訊,
14、不會改變實體 一個ADT的定義就是至少包含上述的 一個功能,23,ADT實例, 自然數(shù)(Nature_Number,自然數(shù)(Nature_Number)的結(jié)構(gòu)(structure)就是 物件: 一個從0開始一直到電腦上的最大整數(shù)值(INT_MAX)結(jié)束的一連串整數(shù)數(shù)列 功能: x,y可以是所有在Nature_Number內(nèi)的元素, TRUE, FALSE是布林值(boolean)而+, -, , and =是一般整數(shù)的運算元 Nat_No Zero( ):= 0 Boolean Is_Zero(x):= if (x) return FALSE else return TRUE Nat_No A
15、dd(x,y):= if (x+y)=INT_MAX) return x+y Boolean Equal(x,y):= if (x=y) return TRUE else return FALSE Nat_No Successor(x):= if (x=INT_MAX) return x else return x+1 Nat_No Subtract(x,y):= if (xy) return 0 else return x-y,24,效能分析,評量程式好壞的一些標準 程式是否有達成所要完成的所有工作? 執(zhí)行結(jié)果正確與否? 程式是否有任何操作說明的文件? 程式是否有效的利用函數(shù)來產(chǎn)生邏輯單元?
16、 程式可讀性是否很高? 客觀分析(Complexity Theory) 程式是否有效的利用了主要及次要的儲存裝置? Space Complexity 程式執(zhí)行出結(jié)果的時間是否能接受? Time Complexity,25,演算法效能的表示式,空間複雜度(Space Complexity) 一個程式要完成工作所需的電腦記憶體空間 固定空間需求(fixed space requirement), c 可變空間需求(variable space requirement), Sp(I) S(P)=c+ Sp(I) 時間複雜度(Time Complexity) 一個程式要完成工作所需的電腦時間 利用不管
17、是在語法或語意上都有重要意義的程式執(zhí)行的每一步(program step)來作為衡量標準 因為通常程式中的每一行與每次程式執(zhí)行的實體變化無關(guān) 漸近線的表示法 當兩個同樣要去完成一個工作的程式的實體特質(zhì)(e.g. input size, algorithm)變化時, 可以預(yù)測在執(zhí)行時間上的成長,26,漸近線的表示法,f(n)就是在算program step時所獲致的函數(shù)值(e.g. f(n)=c1n+c2) O(n) f(n)=O(g(n) iff there exist positive constants c and n0 such that f(n)=n0 3n+2=O(n), (3n+2
18、)=2 (n) f(n)= (g(n) iff there exist positive constants c and n0 such that f(n)=cg(n) for all n, n =n0 3n+2= (n), (3n+2)=3n,n=1 (n) f(n)= (g(n) iff there exist positive constants c1, c2 and n0 such that c1g(n)=n0 所以3n+2= (n), c1=3, c2=4 以selection sort為例,27,實際效能測量Practical Performance Measurement,實際的
19、複雜度分析(Practical Complexity) 在每個不同程式的輸入大小, 在不同區(qū)段的分析(e.g. Figure 1.7 , 1.8 and 1.9) 實際的執(zhí)行效能測量 Use C build-in functions clock() or time() to measure execution time Figure 1.10, Program 1.23 and Figure 1.11 Generating Test Data Worst case data e.g. sequential search (Program 1.24 and 1.25) Large number
20、of random test data,28,If and Only If Iff is a shorthand for the phrase if and only if. This phrase is used in assertions. If I assert that A if and only if B I mean that A is true if B is true, and furthermore, A is true only when B is true. If I say C if D then I know nothing about C when D is false, or about D when C is true. Similarly, were I to say C only if D then I am telling you nothing about C when D is true, or about D whe
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計打印紙張尺寸
- 定點用餐協(xié)議書
- 智慧停車平臺系統(tǒng)方案
- 醫(yī)療服務(wù)和藥品價格公示制度
- 市直機關(guān)“紅歌大家唱”大賽活動方案
- 新能源車材料革新
- 市場拓展合同
- 湖北理工學(xué)院《算法設(shè)計與分析》2021-2022學(xué)年期末試卷
- 法學(xué)專升本課程設(shè)計
- 利益分配協(xié)議書
- 心理咨詢技能的職業(yè)倫理與道德規(guī)范
- 2023年黑龍江事業(yè)單位公共基礎(chǔ)知識真題及答案
- 化學(xué)高二-2022-2023學(xué)年北京市海淀區(qū)高二(上)期末化學(xué)試卷
- C語言程序設(shè)計(第二版)97871132070760000
- 年會禮品選擇的調(diào)研分析
- BUNN 咖啡機 培訓(xùn)指南(Axiom-3 )
- 朝鮮戰(zhàn)爭完整版本
- 我國的宗教政策(共37張)
- 降低kV配電線路故障停運率的有效措施
- 中藥材項目商業(yè)計劃書
- 醫(yī)療核心制度執(zhí)行情況自查表
評論
0/150
提交評論