《资料结构(用C语言)资讯工程学系.ppt》由会员分享,可在线阅读,更多相关《资料结构(用C语言)资讯工程学系.ppt(28页珍藏版)》请在三一办公上搜索。
1、資料結構(用C語言),資訊工程學系王家輝資訊工程學系http:/www.csie.mcu.edu.tw/wangch,課程目標,資料結構是資訊科學學門中的核心課程,而本課程主要在介紹各種型態資料結構在C程式語言中的呈現,以及和演算法的關係。修習本課程的同學,除了學到常用的資料表現方式之外,如何在設計C程式時選取合適的資料結構、配合適當的演算法、和評估所採用的資料結構的優缺點等都是本課程的重點。,課程大綱與進度,程式設計基本概念與C程式語言基本認識C程式語言組成資料型態、運算子、流程控制指令 函數、指標、陣列與結構)輸入/輸出與檔案處理)演算法的規格,資料抽象化與程式的複雜度分析Array(陣列
2、)與Structure(結構)Stack(堆疊)與Queue(佇列)Linked List(串列)Tree(樹狀結構)Graph(圖狀結構)Sorting(排序)Hashing(雜湊結構)Heap(堆積結構)Searching(搜尋結構),參考書籍,Ellis Horowitz,Sarataj Sahni,Susan Anderson-freed,Fundamentals of data structures in C,W.H.Freeman and Company,New York,1993 Brian W.Kernighan,Dennis M.Ritchie,The C Programmi
3、ng Language,2nd Ed.,Printice-Hall,New Jersey,1990,成績評量,平時成績(程式作業)30%期中考30%期末考40%,第一章資料結構基本觀念,資訊工程學系,系統的生命週期System Life Cycle,需求(Requirement)一整套規格(A set of specifications)所需之輸入及輸出(Inputs and Outputs)分析(Analysis)將問題分割成可以掌握的小問題有兩種分析方式由下而上(bottom-up)由草圖一磚一瓦的蓋房子由上而下(top-down)由程式最終要完成目標開始設計組織及流程圖(將程式分割成可管
4、控的單元),系統的生命週期System Life Cycle,設計(Design)抽象化的資料型態(e.g.選課系統)演算法的方法與步驟修正及程式設計(Refinement and Coding)完成抽象化資料的實際表示撰寫演算法的程式驗證(Verification)用理論證明該方法的正確性(Correctness Proofs)費時可參考別人已驗證過的演算法測試(Testing)e.g.if and switch除錯(Error Removal),演算法的一般規格Algorithm Specification,想要利用電腦解決特定問題的方法及步驟,輸入(Input)需要提供0個以上數量的外在
5、資料輸出(Output)至少要有一個以上的資料產出確定性(Definiteness)每一項方法及步驟是清楚而且不是模稜兩可的有限性(Finiteness)這個演算法一定要在有限的步驟內完成有效性(Effectiveness)每一項方法及步驟是足夠簡單的可以完成(可以對應到程式),基本上用一支筆及一張紙就可以完整描述這個演算法,也就是每一步驟是可行的,幾個範例Samples,選擇排序法(Selection Sort)在未排序的數列中每次找出最小(最大)的,將最小(最大)的數值依序列出二元搜尋法(Binary Search)在已排序好的數列中找到是否存在某一筆數值,Selection Sort,一
6、個簡單的方法將一連串正整數做由大到小或者由小到大的排列從這些未排序的數列中一一找出最小,把它們依序置入一個排序的數列中這樣的敘述不是一個演算法的正確描述e.g.沒有告訴這些數列一開始如何儲存,還有結果到底要放到哪裡我們嘗試用中英文和C語言夾雜著來描述這個演算法:,氣泡排序法的演算法Selection Sort Algorithm,假設資料都放在個整數陣列,名字為list,第i筆整數就放在 listi 中,0=infor(i=0;i n;i+)Examine listi to listn-1 and suppose that the smallest integer is at listmin;
7、Interchange listi and listmin;完整程式Program 1.3,Interchange listi and listmin;交換數列中兩筆資料,swap(,程式作業一,嘗試將課本program 1.3的selection sort(macro版)改成呼叫swap()函數用MS Visual C(課本是用ANSI C)或用C+兩個版本的程式都要寫,盡可能在每行程式附上註解並盡可能說明這兩個版本的差異截止日期(2/27)程式嚴禁抄襲,發現抄襲者,與被抄襲者一律以零分計。將執行檔、原始檔及文件壓縮成以學號為檔名的zip檔,並上傳至下列FTP站台,二元搜尋法Binary S
8、earch,假設有n個整數(n=1),它們已經排序過,而且放在一個整數型態的陣列中list0=list1=listn-1要從上述陣列中搜尋到searchnum這個整數如果找到就傳回那個數值所在陣列中的索引位置如果找不到就傳回-1,二元搜尋法Binary Search,讓left,right兩個變數分別代表要搜尋數列範圍中最左邊及最右邊的索引位置一開始的位置當然是 left=0,right=n-1讓另一個變數 middle=(left+right)/2假使我們比較 list middle和 searchnum,可以發現下列三個現象searchnum list middlesearchnum應該落
9、在middle和right區間,所以將left=middle+1如果沒有找到,就要再將middle=(left+right)/2,繼續前一步驟,直到沒有數列可以檢查為止,程式(program 1.6)中用到的比較函數,巨集寫法#define COMPARE(x,y)(x)(y)?1:(x)=(y)?0:1)conditional expressionexpr1?expr2:expr3函數呼叫寫法int compare(int x,int y)if(x y)return-1;else if(x=y)return 0;else return 1;,遞迴演算法Recursive Algorithms
10、,直接遞迴(Direct Recursion)一函數直接呼叫自己二元搜尋法(binary search)排列(permutation)間接遞迴(Indirect Recursion)A函數呼叫 B函數,而B函數會再呼叫A函數Binary search and PermutationProgram 1.7及program1.8在第四章及第五章會有更多的討論,程式作業2,Page 14 Exercise 11Tower of Hanoi漢諾塔或梵天塔截止日期兩個星期後,資料抽象化Data Abstraction,C程式語言所提供的資料型態(data type)C本身已提供有char(字元),int
11、(整數),float(浮點),double(雙精度浮點)另外還有short(短整數),long(長整數)及在基本型態還可以再加上關鍵字 unsigned(非負)來做變化將相同資料型態群組化,(array,陣列)將不一定相同的資料型態的資料集合起來(structure,結構)struct student char last_name;int student_id;char grade;C也提供了所謂指標資料型態(pointer)int i,*p;,資料抽象化Data Abstraction,資料型態(data type)的定義一些物件的集合加上包含在物體上可以操作的一套操作方法抽象資料型態(ab
12、stract data type,ADT)也是資料型態,而它被整理成物件的規格定義和在這些個物件上操作方法的所有規格定義在這些物件上所有的操作方法的定義規格是和物件的呈現及實際操作方法的製作是分開的C是沒有明顯的語法機制來製作ADT,但是可以用一樣的觀念來達成C+(Class),ADA(package)所以ADT可以是與實際製作無關的,資料抽象化Data Abstraction,ADT資料型態所包含的功能產生者/建構者(Creator/Constructor)產生想要的資料型態的實體轉換者(Transformer)通常是要將一個或多個其他的資料型態實體轉換成一個新的資料型態實體觀察者/記錄者(
13、Observer/Reporter)是提供資料型態實體的資訊,不會改變實體一個ADT的定義就是至少包含上述的 一個功能,ADT實例,自然數(Nature_Number),自然數(Nature_Number)的結構(structure)就是物件:一個從0開始一直到電腦上的最大整數值(INT_MAX)結束的一連串整數數列功能:x,y可以是所有在Nature_Number內的元素,TRUE,FALSE是布林值(boolean)而+,-,and=是一般整數的運算元Nat_No Zero():=0Boolean Is_Zero(x):=if(x)return FALSE else return TRUE
14、Nat_No Add(x,y):=if(x+y)=INT_MAX)return x+yBoolean Equal(x,y):=if(x=y)return TRUE else return FALSENat_No Successor(x):=if(x=INT_MAX)return x elsereturn x+1Nat_No Subtract(x,y):=if(xy)return 0 else return x-y,效能分析,評量程式好壞的一些標準程式是否有達成所要完成的所有工作?執行結果正確與否?程式是否有任何操作說明的文件?程式是否有效的利用函數來產生邏輯單元?程式可讀性是否很高?客觀分析(
15、Complexity Theory)程式是否有效的利用了主要及次要的儲存裝置?Space Complexity程式執行出結果的時間是否能接受?Time Complexity,演算法效能的表示式,空間複雜度(Space Complexity)一個程式要完成工作所需的電腦記憶體空間固定空間需求(fixed space requirement),c可變空間需求(variable space requirement),Sp(I)S(P)=c+Sp(I)時間複雜度(Time Complexity)一個程式要完成工作所需的電腦時間利用不管是在語法或語意上都有重要意義的程式執行的每一步(program st
16、ep)來作為衡量標準因為通常程式中的每一行與每次程式執行的實體變化無關漸近線的表示法當兩個同樣要去完成一個工作的程式的實體特質(e.g.input size,algorithm)變化時,可以預測在執行時間上的成長,漸近線的表示法,f(n)就是在算program step時所獲致的函數值(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)=n03n+2=O(n),(3n+2)=2(n)f(n)=(g(n)iff there exist positive constant
17、s c and n0 such that f(n)=cg(n)for all n,n=n03n+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為例,實際效能測量Practical Performance Measurement,實際的複雜度分析(Practical Complexity)在每個不同程式的輸入大小,在不同區段的分析(e.g.Figure 1.7,1.8 and
18、1.9)實際的執行效能測量Use C build-in functions clock()or time()to measure execution timeFigure 1.10,Program 1.23 and Figure 1.11Generating Test DataWorst case datae.g.sequential search(Program 1.24 and 1.25)Large number of random test data,If and Only IfIff is a shorthand for the phrase if and only if.This p
19、hrase 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 abo
20、ut C when D is true,or about D when C is false.Got it?You can say the same thing in a variety of ways.Saying A iff B is the same thing as saying A implies B,and B implies A,or,one of my favorites,that A is a necessary and sufficient condition for B,or,equivalently,B is a necessary and sufficient con
21、dition for A.The following are equivalent conditions:A implies B B if A A only if B A is sufficient for B B is necessary for A B or(not A)So if I say that A is necessary and sufficient for B,then we get:A if and only if B,and(B or(not A)and(A or(not B)which is equivalent to(A and B)or(not A)and(not B)-in other words,A and B are either both true or both false.A and B are equivalent.,