




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
資料結構(用C語言),資訊工程學系王家輝.tw資訊工程學系.tw/wangch,課程目標,資料結構是資訊科學學門中的核心課程,而本課程主要在介紹各種型態資料結構在C程式語言中的呈現,以及和演算法的關係。修習本課程的同學,除了學到常用的資料表現方式之外,如何在設計C程式時選取合適的資料結構、配合適當的演算法、和評估所採用的資料結構的優缺點等都是本課程的重點。,課程大綱與進度,程式設計基本概念與C程式語言基本認識C程式語言組成資料型態、運算子、流程控制指令函數、指標、陣列與結構)輸入/輸出與檔案處理)演算法的規格,資料抽象化與程式的複雜度分析Array(陣列)與Structure(結構)Stack(堆疊)與Queue(佇列)LinkedList(串列)Tree(樹狀結構)Graph(圖狀結構)Sorting(排序)Hashing(雜湊結構)Heap(堆積結構)Searching(搜尋結構),參考書籍,EllisHorowitz,SaratajSahni,SusanAnderson-freed,FundamentalsofdatastructuresinC,W.H.FreemanandCompany,NewYork,1993BrianW.Kernighan,DennisM.Ritchie,TheCProgrammingLanguage,2ndEd.,Printice-Hall,NewJersey,1990,成績評量,平時成績(程式作業)30%期中考30%期末考40%,第一章資料結構基本觀念,資訊工程學系,系統的生命週期SystemLifeCycle,需求(Requirement)一整套規格(Asetofspecifications)所需之輸入及輸出(InputsandOutputs)分析(Analysis)將問題分割成可以掌握的小問題有兩種分析方式由下而上(bottom-up)由草圖一磚一瓦的蓋房子由上而下(top-down)由程式最終要完成目標開始設計組織及流程圖(將程式分割成可管控的單元),系統的生命週期SystemLifeCycle,設計(Design)抽象化的資料型態(e.g.選課系統)演算法的方法與步驟修正及程式設計(RefinementandCoding)完成抽象化資料的實際表示撰寫演算法的程式驗證(Verification)用理論證明該方法的正確性(CorrectnessProofs)費時可參考別人已驗證過的演算法測試(Testing)e.g.ifandswitch除錯(ErrorRemoval),演算法的一般規格AlgorithmSpecification,想要利用電腦解決特定問題的方法及步驟,輸入(Input)需要提供0個以上數量的外在資料輸出(Output)至少要有一個以上的資料產出確定性(Definiteness)每一項方法及步驟是清楚而且不是模稜兩可的有限性(Finiteness)這個演算法一定要在有限的步驟內完成有效性(Effectiveness)每一項方法及步驟是足夠簡單的可以完成(可以對應到程式),基本上用一支筆及一張紙就可以完整描述這個演算法,也就是每一步驟是可行的,幾個範例Samples,選擇排序法(SelectionSort)在未排序的數列中每次找出最小(最大)的,將最小(最大)的數值依序列出二元搜尋法(BinarySearch)在已排序好的數列中找到是否存在某一筆數值,SelectionSort,一個簡單的方法將一連串正整數做由大到小或者由小到大的排列從這些未排序的數列中一一找出最小,把它們依序置入一個排序的數列中這樣的敘述不是一個演算法的正確描述e.g.沒有告訴這些數列一開始如何儲存,還有結果到底要放到哪裡我們嘗試用中英文和C語言夾雜著來描述這個演算法:,氣泡排序法的演算法SelectionSortAlgorithm,假設資料都放在個整數陣列,名字為list,第i筆整數就放在listi中,0=infor(i=0;i=1),它們已經排序過,而且放在一個整數型態的陣列中list0=list1=listn-1要從上述陣列中搜尋到searchnum這個整數如果找到就傳回那個數值所在陣列中的索引位置如果找不到就傳回-1,二元搜尋法BinarySearch,讓left,right兩個變數分別代表要搜尋數列範圍中最左邊及最右邊的索引位置一開始的位置當然是left=0,right=n-1讓另一個變數middle=(left+right)/2假使我們比較listmiddle和searchnum,可以發現下列三個現象searchnumlistmiddlesearchnum應該落在middle和right區間,所以將left=middle+1如果沒有找到,就要再將middle=(left+right)/2,繼續前一步驟,直到沒有數列可以檢查為止,程式(program1.6)中用到的比較函數,巨集寫法#defineCOMPARE(x,y)(x)(y)?1:(x)=(y)?0:1)conditionalexpressionexpr1?expr2:expr3函數呼叫寫法intcompare(intx,inty)if(xy)return-1;elseif(x=y)return0;elsereturn1;,遞迴演算法RecursiveAlgorithms,直接遞迴(DirectRecursion)一函數直接呼叫自己二元搜尋法(binarysearch)排列(permutation)間接遞迴(IndirectRecursion)A函數呼叫B函數,而B函數會再呼叫A函數BinarysearchandPermutationProgram1.7及program1.8在第四章及第五章會有更多的討論,程式作業2,Page14Exercise11TowerofHanoi漢諾塔或梵天塔截止日期兩個星期後,資料抽象化DataAbstraction,C程式語言所提供的資料型態(datatype)C本身已提供有char(字元),int(整數),float(浮點),double(雙精度浮點)另外還有short(短整數),long(長整數)及在基本型態還可以再加上關鍵字unsigned(非負)來做變化將相同資料型態群組化,(array,陣列)將不一定相同的資料型態的資料集合起來(structure,結構)structstudentcharlast_name;intstudent_id;chargrade;C也提供了所謂指標資料型態(pointer)inti,*p;,資料抽象化DataAbstraction,資料型態(datatype)的定義一些物件的集合加上包含在物體上可以操作的一套操作方法抽象資料型態(abstractdatatype,ADT)也是資料型態,而它被整理成物件的規格定義和在這些個物件上操作方法的所有規格定義在這些物件上所有的操作方法的定義規格是和物件的呈現及實際操作方法的製作是分開的C是沒有明顯的語法機制來製作ADT,但是可以用一樣的觀念來達成C+(Class),ADA(package)所以ADT可以是與實際製作無關的,資料抽象化DataAbstraction,ADT資料型態所包含的功能產生者/建構者(Creator/Constructor)產生想要的資料型態的實體轉換者(Transformer)通常是要將一個或多個其他的資料型態實體轉換成一個新的資料型態實體觀察者/記錄者(Observer/Reporter)是提供資料型態實體的資訊,不會改變實體一個ADT的定義就是至少包含上述的一個功能,ADT實例,自然數(Nature_Number),自然數(Nature_Number)的結構(structure)就是物件:一個從0開始一直到電腦上的最大整數值(INT_MAX)結束的一連串整數數列功能:x,y可以是所有在Nature_Number內的元素,TRUE,FALSE是布林值(boolean)而+,-,and=是一般整數的運算元Nat_NoZero():=0BooleanIs_Zero(x):=if(x)returnFALSEelsereturnTRUENat_NoAdd(x,y):=if(x+y)=n03n+2=(n),(3n+2)=3n,n=1(n)f(n)=(g(n)iffthereexistpositiveconstantsc1,c2andn0suchthatc1g(n)=n0所以3n+2=(n),c1=3,c2=4以selectionsort為例,實際效能測量PracticalPerformanceMeasurement,實際的複雜度分析(PracticalComplexity)在每個不同程式的輸入大小,在不同區段的分析(e.g.Figure1.7,1.8and1.9)實際的執行效能測量UseCbuild-infunctionsclock()ortime()tomeasureexecutiontimeFigure1.10,Program1.23andFigure1.11GeneratingTestDataWorstcasedatae.g.sequentialsearch(Program1.24and1.25)Largenumberofrandomtestdata,IfandOnlyIfIffisashorthandforthephraseifandonlyif.Thisphraseisusedinassertions.IfIassertthatAifandonlyifBImeanthatAistrueifBistrue,andfurthermore,AistrueonlywhenBistrue.IfIsayCifDthenIknownothingaboutCwhenDisfalse,oraboutDwhenCistrue.Similarly,wereItosayConlyifDthenIamtellingyounothingaboutCwhenDistrue,oraboutDwhenCisfalse.Gotit?Youcansaythesamethinginavarietyofways.SayingAiffBisthesamethingassayingAimpliesB,andBimpliesA,or,oneofmyfavorites,thatAisanecessaryandsufficientconditionforB,or,equivalently,BisanecessaryandsufficientconditionforA.Thefollowingareequivalentconditions:AimpliesBBifAAonlyifBAissufficientforBBisnecess
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2031年中国数显四开切纸机行业投资前景及策略咨询研究报告
- 2025至2031年中国平衡重式电动车行业投资前景及策略咨询研究报告
- 2025至2031年中国工业吸塑包装制品行业投资前景及策略咨询研究报告
- 2025至2031年中国室温硫化硅橡胶行业投资前景及策略咨询研究报告
- 华北房地产AI应用行业深度调研及发展项目商业计划书
- 2025至2031年中国地下管线定位仪行业投资前景及策略咨询研究报告
- 2025至2031年中国呼气阀防尘口罩行业投资前景及策略咨询研究报告
- 2025至2031年中国反口盐水瓶塞行业投资前景及策略咨询研究报告
- 生物观察室行业深度调研及发展项目商业计划书
- 2025至2031年中国单咀调压器行业投资前景及策略咨询研究报告
- 中国多聚甲醛行业发展分析及投资价值预测研究报告2025-2028版
- 江苏省南通等六市2025届高三最后一卷英语试卷含解析
- 房建工程总承包EPC项目技术标(投标方案)(技术标)
- 专利代理师考试题库含答案2024
- 赣州城投招聘试题及答案
- 2024北京海淀区四年级(下)期末语文试题及答案
- 2025届海南中考地理高频考点模拟检测试题(一模)含解析
- 输血流程培训试题
- 企业安全生产知识题库
- 2025-2030方块地毯行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 钢筋混凝土蓄水池施工方案
评论
0/150
提交评论