资料结构与演算法.ppt

  1. 1、本文档共70页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
資料結構與演算法 課程教學投影片 第九章–鏈結串列 本章各段大綱 9-1 鏈結串列概觀 9-2 單一鏈結串列以陣列表示 9-3 雙向鏈結串列以陣列表示 9-4 鏈結串列用指標和結構來表示 9-5 鏈結串列應用在其它結構 9-1 鏈結串列概觀 串列的定義:串列(list)的抽象觀念是指一組相同資料型態元素的有序集合。 例子如下 正奇數串列(1,3,5,7,9,……)。 正偶數串列(2,4,6,8,10,……)。 費伯那西數串列(1,1,2,3,5,8,……)。 正質數串列(2,3,5,7,11,13,……)。 大寫英文字母串列(A,B,C,D,……,X,Y,Z)。 9-1 鏈結串列概觀 串列的應用 因為串列中的元素是有次序的,一般串列中元素的排列次序是由小而大,例如正整數串列的1234 有序的串列應用到電腦中的情況則有ASCⅡ碼,如AB……Zab……z ex: (a)ASCⅡ碼中A的下1個B,則第10個是什麼? (b)ASCⅡ碼中A的號碼是65,則Z的號碼為多少? 解答:(a) K (b) 90 9-1 鏈結串列概觀 鏈結串列 在資料處理或資料結構的領域中,對於一些資料(或數字),可以利用類似箭頭的鏈結(link)將資料統合起來,可以一個連到下一個,而形成有次序的資料(或數字),則此結構稱為鏈結串列(linked list)。 鏈結串列定義:鏈結串列(link list)是一種有順序的串列,且資料項應包含鏈結(link),可以鏈結到其它資料。此資料項稱為節點 9-1 鏈結串列概觀 鏈結串列有以下的特性: 鏈結串列一般可以用陣列結構型式來表示。 節點順序在記憶體中的實際位址可以不連續,或者是經由隨機配置,不像陣列的元素在記憶體中的實際位址是連續的。 依鏈結的型式不同,鏈結串列分為下列幾類: 單向鏈結:節點之間按順序,一個鏈結一個。最後沒有鏈結者,其link值為Null或特定值。 環狀鏈結:同單向鏈結的型式,但是最後一個節點指向第1個節點。 雙向鏈結:節點包含資料和左右兩個鏈結。 樹狀鏈結:鏈結的型式如樹狀結構。 圖形鏈結:鏈結的型式如圖形結構。 9-1 鏈結串列概觀 單向鏈結 節點之間按順序,一個鏈結一個。最後沒有鏈結者,其link值為Null或特定值。 9-1 鏈結串列概觀 環狀鏈結 同單向鏈結的型式,但是最後一個節點指向第1個節點。 9-1 鏈結串列概觀 雙向鏈結 節點包含資料和左右兩個鏈結。 9-1 鏈結串列概觀 樹狀鏈結 鏈結的型式如樹狀結構。 9-1 鏈結串列概觀 圖形鏈結 鏈結的型式如圖形結構。 9-1 鏈結串列概觀 鏈結串列的應用: 其特性是因為加入鏈結(link)使得資料可以串起來,使其有次序性,而形成其他結構的應用,以求得更佳的演算法 加速排序速度 假如用陣列存放數值資料,且依大小排序,刪除、增加、修改資料,且需要重新排序,例如原有資料量n個,則由第6章排序方法得知排序演算法的時間是O(n log n)或是O(n2),而且都是針對固定的資料來排序。 但如果用鏈結串列結構來處理,則資料異動的時間只在有限次數內,時間是O(1),如果加上搜尋到資料再異動時,搜尋的最差時間是O(n),所以總共的異動時間為O(mn),這比O(mn2)或O(mn log n)有效率 堆疊、佇列 可以利用鏈結串列來表示其結構。只要資料異動頻繁且要維持其定義的次序性,都適合用鏈結串列。 9-2 單一鏈結串列以陣列表示 鏈結陣列的宣告方式如下 #define maxsize 100; int A[2][maxsize];//第一列存放資料, 第二列存放鏈結 int head;另外需要一個獨立的變數來存放一個陣列的起始點 9-2 單一鏈結串列以陣列表示 鏈結陣列的主要操作: 尋找節點 目的: 找出陣列中比搜尋數值小的最後一個位置 傳回該值所在位置的索引值 演算法說明圖 9-2 單一鏈結串列以陣列表示 鏈結陣列的主要操作: 尋找節點演算法說明圖 9-2 單一鏈結串列以陣列表示 節點尋找的演算法如下 9-2 單一鏈結串列以陣列表示 新增節點演算法圖解 1 將10加入鏈節串列中 先找到串列中最大值20 傳回ans=-1(無任何連結節點),代表加入的點必須為起始點 設定此加入點的內容A[0][1]=10及鏈結節點值A[1][1]為前點20的索引值0 9-2 單一鏈結串列以陣列表示 新增節點演算法圖解 2 將40加入鏈節串列中 40比所有值都大,先找到串列中最大值20 傳回前一個值20的索引值0 將20的鏈節節點值A[1][0]=-1複製給將40的鏈節節點A[1][2] 將20的鏈節節點值A[1][0]設定為40的索引值2 9-2 單一鏈結串列以陣列表示 新增節點演算法圖解 3 將30加入鏈節串列中 30比20大,先找到串列

文档评论(0)

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

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

1亿VIP精品文档

相关文档