版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
資料結構(用C語言)資訊工程學系王家輝wangch@.tw資訊工程學系.tw/~wangch1精品PPT|借鉴参考第一页,共二十九页。課程目標資料結構是資訊科學學門中的核心課程,而本課程主要在介紹各種型態資料結構在C程式語言中的呈現,以及和演算法的關係。修習本課程的同學,除了學到常用的資料表現方式之外,如何在設計C程式時選取合適的資料結構、配合適當的演算法、和評估所採用的資料結構的優缺點等都是本課程的重點。2精品PPT|借鉴参考第二页,共二十九页。課程大綱與進度程式設計基本概念與C程式語言基本認識C程式語言組成資料型態、運算子、流程控制指令
函數、指標、陣列與結構)輸入/輸出與檔案處理)演算法的規格,資料抽象化與程式的複雜度分析Array(陣列)與Structure(結構)Stack(堆疊)與Queue(佇列)LinkedList(串列)Tree(樹狀結構)Graph(圖狀結構)Sorting(排序)Hashing(雜湊結構)Heap(堆積結構)Searching(搜尋結構)
3精品PPT|借鉴参考第三页,共二十九页。參考書籍EllisHorowitz,SaratajSahni,SusanAnderson-freed,FundamentalsofdatastructuresinC,W.H.FreemanandCompany,NewYork,1993BrianW.Kernighan,DennisM.Ritchie,TheCProgrammingLanguage,2ndEd.,Printice-Hall,NewJersey,19904精品PPT|借鉴参考第四页,共二十九页。成績評量平時成績(程式作業)30%期中考30%期末考40%5精品PPT|借鉴参考第五页,共二十九页。第一章
資料結構基本觀念資訊工程學系6精品PPT|借鉴参考第六页,共二十九页。系統的生命週期
SystemLifeCycle需求(Requirement)一整套規格(Asetofspecifications)所需之輸入及輸出(InputsandOutputs)分析(Analysis)將問題分割成可以掌握的小問題有兩種分析方式由下而上(bottom-up)由草圖一磚一瓦的蓋房子由上而下(top-down)由程式最終要完成目標開始設計組織及流程圖(將程式分割成可管控的單元)7精品PPT|借鉴参考第七页,共二十九页。系統的生命週期
SystemLifeCycle設計(Design)抽象化的資料型態(e.g.選課系統)演算法的方法與步驟修正及程式設計(RefinementandCoding)完成抽象化資料的實際表示撰寫演算法的程式驗證(Verification)用理論證明該方法的正確性(CorrectnessProofs)費時可參考別人已驗證過的演算法測試(Testing)e.g.‘if’and‘switch’除錯(ErrorRemoval)8精品PPT|借鉴参考第八页,共二十九页。演算法的一般規格
AlgorithmSpecification想要利用電腦解決特定問題的方法及步驟,輸入(Input)需要提供0個以上數量的外在資料輸出(Output)至少要有一個以上的資料產出確定性(Definiteness)每一項方法及步驟是清楚而且不是模稜兩可的有限性(Finiteness)這個演算法一定要在有限的步驟內完成有效性(Effectiveness)每一項方法及步驟是足夠簡單的可以完成(可以對應到程式),基本上用一支筆及一張紙就可以完整描述這個演算法,也就是每一步驟是可行的9精品PPT|借鉴参考第九页,共二十九页。幾個範例
Samples選擇排序法(SelectionSort)在未排序的數列中每次找出最小(最大)的,將最小(最大)的數值依序列出二元搜尋法(BinarySearch)在已排序好的數列中找到是否存在某一筆數值10精品PPT|借鉴参考第十页,共二十九页。SelectionSort一個簡單的方法將一連串正整數做由大到小或者由小到大的排列從這些未排序的數列中一一找出最小,把它們依序置入一個排序的數列中這樣的敘述不是一個演算法的正確描述e.g.沒有告訴這些數列一開始如何儲存,還有結果到底要放到哪裡我們嘗試用中英文和C語言夾雜著來描述這個演算法:11精品PPT|借鉴参考第十一页,共二十九页。氣泡排序法的演算法
SelectionSortAlgorithm假設資料都放在個整數陣列,名字為list,第i筆整數就放在list[i]中,0<=i<nfor(i=0;i<n;i++){Examinelist[i]tolist[n-1]andsupposethatthesmallestintegerisatlist[min];Interchangelist[i]andlist[min];} 完整程式Program1.312精品PPT|借鉴参考第十二页,共二十九页。Interchangelist[i]andlist[min];
交換數列中兩筆資料swap(&a,&b),aandb被宣告為整數變數巨集指令寫法#defineSWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t)函數呼叫寫法voidswap(int*x,int*y){inttemp=*x;*x=*y;*y=temp;}13精品PPT|借鉴参考第十三页,共二十九页。程式作業一嘗試將課本program1.3的selectionsort(macro版)改成呼叫swap()函數用MSVisualC(課本是用ANSIC)或用C++兩個版本的程式都要寫,盡可能在每行程式附上註解並盡可能說明這兩個版本的差異截止日期(2/27)程式嚴禁抄襲,發現抄襲者,與被抄襲者一律以零分計。將執行檔、原始檔及文件壓縮成以學號為檔名的zip檔,並上傳至下列FTP站台0
14精品PPT|借鉴参考第十四页,共二十九页。二元搜尋法
BinarySearch假設有n個整數(n>=1),它們已經排序過,而且放在一個整數型態的陣列中list[0]<=list[1]<=………<=list[n-1]要從上述陣列中搜尋到searchnum這個整數如果找到就傳回那個數值所在陣列中的索引位置如果找不到就傳回-115精品PPT|借鉴参考第十五页,共二十九页。二元搜尋法
BinarySearch讓left,right兩個變數分別代表要搜尋數列範圍中最左邊及最右邊的索引位置一開始的位置當然是left=0,right=n-1讓另一個變數middle=(left+right)/2假使我們比較list[middle]和searchnum,可以發現下列三個現象searchnum<list[middle]searchnum應該落在left和middle區間,所以將right=middle-1searchnum
=list[middle]運氣真好.傳回middlesearchnum>list[middle]searchnum應該落在middle和right區間,所以將left=middle+1如果沒有找到,就要再將middle=(left+right)/2,繼續前一步驟,直到沒有數列可以檢查為止16精品PPT|借鉴参考第十六页,共二十九页。程式(program1.6)中用到的比較函數巨集寫法#defineCOMPARE(x,y)(((x)<(y))?–1:((x)==(y))?0:1)conditionalexpressionexpr1?expr2:expr3函數呼叫寫法intcompare(intx,inty){if(x<y)return-1;elseif(x==y)return0;elsereturn1;}17精品PPT|借鉴参考第十七页,共二十九页。遞迴演算法
RecursiveAlgorithms直接遞迴(DirectRecursion)一函數直接呼叫自己二元搜尋法(binarysearch)排列(permutation)
間接遞迴(IndirectRecursion)A函數呼叫B函數,而B函數會再呼叫A函數BinarysearchandPermutationProgram1.7及program1.8在第四章及第五章會有更多的討論18精品PPT|借鉴参考第十八页,共二十九页。程式作業2Page14Exercise11TowerofHanoi漢諾塔或梵天塔截止日期兩個星期後19精品PPT|借鉴参考第十九页,共二十九页。資料抽象化
DataAbstractionC程式語言所提供的資料型態(datatype)C本身已提供有char(字元),int(整數),float(浮點),
double(雙精度浮點)另外還有short(短整數),long(長整數)及在基本型態還可以再加上關鍵字unsigned(非負)來做變化將相同資料型態群組化,[](array,陣列)將不一定相同的資料型態的資料集合起來(structure,結構)structstudent{charlast_name;intstudent_id;chargrade;}C也提供了所謂指標資料型態(pointer)inti,*p;20精品PPT|借鉴参考第二十页,共二十九页。資料抽象化
DataAbstraction資料型態(datatype)的定義一些物件的集合加上包含在物體上可以操作的一套操作方法抽象資料型態(abstractdatatype,ADT)也是資料型態,而它被整理成物件的規格定義和在這些個物件上操作方法的所有規格定義在這些物件上所有的操作方法的定義規格是和物件的呈現及實際操作方法的製作是分開的C是沒有明顯的語法機制來製作ADT,但是可以用一樣的觀念來達成C++(Class),ADA(package)所以ADT可以是與實際製作無關的21精品PPT|借鉴参考第二十一页,共二十九页。資料抽象化
DataAbstractionADT資料型態所包含的功能產生者/建構者(Creator/Constructor)產生想要的資料型態的實體轉換者(Transformer)通常是要將一個或多個其他的資料型態實體轉換成一個新的資料型態實體觀察者/記錄者(Observer/Reporter)是提供資料型態實體的資訊,不會改變實體一個ADT的定義就是至少包含上述的一個功能22精品PPT|借鉴参考第二十二页,共二十九页。PPT内容概述資料結構(用C語言)。一整套規格(Asetofspecifications)。inttemp=*x。假使我們比較list[middle]和searchnum,可以發現下列三個現象。searchnum<list[middle]。searchnum=list[middle]。searchnum>list[middle]。if(x<y)return-1。BinarysearchandPermutation。Page14Exercise11。固定空間需求(fixedspacerequirement),c。Figure1.10,Program1.23andFigure1.11。Largenumberofrandomtestdata。Thefollowingareequivalentconditions:。AonlyifB第二十三页,共二十九页。ADT實例,自然數(Nature_Number)自然數(Nature_Number)的結構(structure)就是物件:一個從0開始一直到電腦上的最大整數值(INT_MAX)結束的一連串整數數列功能:x,y可以是所有在Nature_Number內的元素,TRUE,FALSE是布林值(boolean)而+,-,<,and==是一般整數的運算元Nat_NoZero() ::=0BooleanIs_Zero(x) ::=if(x)returnFALSEelse returnTRUENat_NoAdd(x,y) ::=if((x+y)<=INT_MAX) returnx+yBooleanEqual(x,y) ::=if((x==y)returnTRUEelse returnFALSENat_NoSuccessor(x) ::=if(x==INT_MAX)returnxelse returnx+1Nat_NoSubtract(x,y) ::=if(x<y)return0elsereturnx-y24精品PPT|借鉴参考第二十四页,共二十九页。效能分析評量程式好壞的一些標準程式是否有達成所要完成的所有工作?執行結果正確與否?程式是否有任何操作說明的文件?程式是否有效的利用函數來產生邏輯單元?程式可讀性是否很高?客觀分析(ComplexityTheory)程式是否有效的利用了主要及次要的儲存裝置?SpaceComplexity程式執行出結果的時間是否能接受?TimeComplexity25精品PPT|借鉴参考第二十五页,共二十九页。演算法效能的表示式空間複雜度(SpaceComplexity)一個程式要完成工作所需的電腦記憶體空間固定空間需求(fixedspacerequirement),c可變空間需求(variablespacerequirement),Sp(I)S(P)=c+Sp(I)時間複雜度(TimeComplexity)一個程式要完成工作所需的電腦時間利用不管是在語法或語意上都有重要意義的程式執行的每一步(programstep)來作為衡量標準因為通常程式中的每一行與每次程式執行的實體變化無關漸近線的表示法當兩個同樣要去完成一個工作的程式的實體特質(e.g.inputsize,algorithm)變化時,可以預測在執行時間上的成長26精品PPT|借鉴参考第二十六页,共二十九页。漸近線的表示法f(n)就是在算programstep時所獲致的函數值(e.g.f(n)=c1n+c2)O(n)f(n)=O(g(n))iffthereexistpositiveconstantscandn0suchthatf(n)<=cg(n)foralln,n>=n03n+2=O(n),(3n+2)<=4n,n>=2(n)f(n)=
(g(n))iffthereexistpositiveconstantscandn0suchthatf(n)>=cg(n)foralln,n>=n03n+2=
(n),(3n+2)>=3n,n>=1(n)f(n)=
(g(n))iffthereexistpositiveconstantsc1,c2andn0suchthatc1g(n)<=f(n)<=c2g(n)foralln,n>=n0所以3n+2=
(n),c1=3,c2=4以selectionsort為例27精品PPT|借鉴参考第二十七页,共二十九页。實際效能測量
PracticalPerformanceMeasurement實際的複雜度分析(PracticalComplexity)在每個不同程式的輸入大小,在不同區段的分析(e.g.Figure1.7,1.8and1.9)
實際的執行效能測量UseCbuild-infunctionsclock()ortime()tomeasureexecutiontimeFigure1.10,Program1.23andFigure1.11GeneratingTestDataWorstcasedatae.g.sequentialsearch(Program1.24and1.25)Largenumberofrandomtestdata28精品PPT|借鉴参考第二十八页,共二十九页。IfandOnlyIf``Iff''isashorthandforthephrase``ifandonlyif.''Thisphraseisusedinassertions.IfIassertthat``A
ifandonlyif
B''ImeanthatAistrueifBistrue,andfurthermore,AistrueonlywhenBistrue.IfIsay``CifD''thenIknownothingaboutCwhenDisf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论