象资料型态.PPT

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
象资料型态

Chapter 09 抽象資料型態與演算法 學習目標 定義抽象資料型態並討論它在演算法發展上的角色。 區分資料型態與資料結構。 區分陣列為主的實現與鏈結實現的不同。 區分陣列與串列。 學習目標(續) 區分未排序的串列與已排序的串列。 區分選擇排序與泡沫排序。 說明快速排序演算法。 以手寫方式應用選擇排序、泡沫排序與快速排序到串列的項目上。 應用二元搜尋演算法。 學習目標(續) 區分堆疊與佇列的操作之不同。 畫出二元搜尋樹由插入一系列的項目來建立。 具體說明你對本章裏所提的演算法之了解程度,並以一序列的項目用手寫方式模擬這些演算法。 抽象資料型態 象資料型態(abstract data type):所被指定的特性(資料與操作)與任何特定的實現方式無關的資料型態。 抽象化設計的目標就是要降低複雜度。 抽象資料型態(續) 在計算機領域裏,我們從三個方面來看待資料 應用層面(Application level) 看待資料是在一特定問題之中。 邏輯層面( Logical level) 資料值(領域)的一種抽象觀點與操作這些值的運算子之集合。 實現層面(Implementation level) 具有資料項目的結構與在程式語言中運算的程式碼之特殊表達方式。 抽象資料型態(續) 資料結構(data structure):在抽象資料型態中組成資料欄位的實現方法 容器(container)用來儲存資料項目 陣列為主的實現 回想 陣列被視為是同質項目集合的名稱 。 在集合中的位置稱之為索引(index)。 如果在容器內的項目沒有次序關係,我們稱此容器是未經排序的(unsorted)。 如果有一種次序關係存在,我們稱此容器是排序過的(sorted)。 陣列為主的實現(續) 陣列為主的實現(續) 陣列為主的實現(續) 鏈結的實現 鏈結的實現(linked implementation):基於節點(node)的概念。 節點是由兩部分的資料組成:一個是使用者希望存在串列中的資料項目與一個指向串列中下一個節點的指標。 鏈結的實現(續) 鏈結的實現(續) 鏈結的實現(續) 鏈結的實現(續) 鏈結的實現(續) 串列 表列所做的動作 建立它自己 插入一個項目 刪除一個項目 印出它自己 知道它所儲存的項目數量 通用資料型態(generic data type)(或類別)是一種指定好動作了,但是要被操作的物件型態或類別則還未指定。 排序 因為要排序一個大量項目的串列是非常耗時的,所以非常需要一個好的排序演算法。 我們介紹幾種相當不一樣的排序演算法 。 選擇排序 姓名的表列 將它們以字母的順序排列好 找出在字母中排在最前面的姓名,並將它寫在另一張紙上。 從原先的表列中劃去這個姓名。 繼續重複這個循環步驟直到所有在原先表列上的姓名都被劃去了並寫到了第二張表列上,在這個時候第二張表列是已排序好的名單。 選擇排序(續) 稍微調整一下這個手動的做法可以省掉需要的複製空間。 當你劃掉一個姓名於原先的表列時,就產生了一個自由的空間了。 我們不用將最小的值寫在第二張表列上,而是將這個被劃去的項目與它正確應該放置的位置上的那個項目做交換。 選擇排序(續) 泡沫排序 一種選擇排序方法,但使用不同的機制來找出最小值。 由串列的最後一項開始,我們比較相鄰的一對項目,當這對項目中在底層的小於在它上層的項目時就進行交換 。 泡沫排序(續) 快速排序 基於一個構想,也就是排序兩個較小的串列要比一個大的串列來得快速且容易一點。 已知有一大疊的期末考卷要將它們按照名字排序。 選一個分割值,譬如說L,並將這疊測驗卷分成兩堆,A-L與M-Z 。 注意這兩堆的試卷數量不一定要相同。 然後取出第一堆並再將它分成兩小堆,A-F與G-L。A-F這一堆可以再進一步分成A-C與D-F。 這個分割過程不斷地做下去直到這堆試卷足夠小而可以容易地以手動排序。 快速排序(續) 快速排序(續) 快速排序(續) 快速排序(續) 二元搜尋 是由串列的開頭處開始找起,然後繼續往下找,直到項目被找到了或是整個串列都找過了卻找不到該項目。 二元搜尋(續) 二元搜尋是基於與用在快速排序法相同的「分割並征服」(divide-and-conquer)策略來進行搜尋。 二元搜尋的演算法是假設要被搜尋的串列中項目已排序好。 此演算法是從串列的中間處開始。 如果我們要尋找的項目小於中間位置的項目,那我們就知道該項目不會出現在串列的後半段。 再一次我們檢查在「中間」的項目(這大約在串列的25%處的項目)。 這個程序持續著在每一次比較後,將串列切為兩半,留下可能有資料的那一半邊繼續尋找。 二元搜尋(續) 二元搜尋(續) 二元搜尋(續) 堆疊 一個堆疊是一個抽象的資料型態,存取資料只從一

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档