Chap03-链结串列结构.ppt

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

資料結構導論 - C語言實作 鏈結串列結構 3.1 前言 陣列結構(Array)和鏈結串列(Linked List): 陣列的使用是透過陣列變數及對應的索引來存取陣列個別元素。 鏈結串列儲存資料的方式是將個別資料項次(data item)透過鏈結串在一起。 3.2單向鏈結串列 給定一組未經排序的六筆資料{5,78,65,31,83,98} ,經由小而大排序後再存入一個大小為10的一維陣列DATA中,如圖3.1所示。 假設我們希望將資料45加入這些排序過的資料中並維持由小到大的順序,利用陣列結構在處理資料的插入是相當麻煩的。 3.2單向鏈結串列 圖3.2 陣列結構DATA[10](插入45後的結果) 3.2單向鏈結串列 以C語言為例,宣告單向鏈結串列的語法如下: 3.2單向鏈結串列 以C語言為例,宣告單向鏈結串列的開端節點指標語法如下: 3.2單向鏈結串列 3.2單向鏈結串列 3.2單向鏈結串列 3.2單向鏈結串列 3.2單向鏈結串列 我們將利用圖3.7中一個包含六筆資料的有序單向鏈結串列為例子來介紹幾種基本的運作。 圖3.7 有序單向鏈結串列 3.2單向鏈結串列 圖3.8 將資料45插入圖3.7之鏈結串列之結果 3.2.3 將單向鏈結串列反轉 單向鏈結串列是一個具有方向性的資料表示法,要將一個單向鏈結串列反轉就是要將節點與節點之間的順序關係倒轉。 3.2.3 將單向鏈結串列反轉 以C語言為例,反轉一個單向鏈結串列的處理程序列語法如下: 3.2.4 計算串列之長度 串列之長度指的是串列中儲存資料之節點個數,不包含front及rear。 以C語言為例,計算串列之長度語法如下: 3.2.4 計算串列之長度 3.2.5 串列之合併 假設我們希望將兩個單向鏈結串列x與y合併,我們必須將串列y中的所有節點合併到串列x的所有節點後面,產生一個合併後的串列z。在合併的處理中我們發現可能會有下列三種可能狀況出現: (1). 當串列x是空的則合併後的串列z就是串列y。 (2). 當串列y是空的則合併後的串列z就是串列x。 (3). 如果串列x與y都不是空串列,則必須將串列y中所有的節點搬移到串列x的所有節點之後,即可完成兩個串列合併的動作。 3.2.5 串列之合併 假設串列x與y皆為非空的串列,我們發現合併的動作包含下列幾個步驟: 1.將front_z 指向串列x的第一個節點。 2.找到x串列的最後一個節點。然後設定此節點的鏈結欄位指向串列y的第一個節點。 圖3.16 串列之合併 3.2.5 串列之合併(1) 以C語言為例,將 y 串列合併到 x 串列之後,並以 front_z 為新串列的前端,其語法如下: 3.2.5 串列之合併(1) 3.2.5 串列之合併(2) 以C語言為例,將 y 串列合併到 x 串列之後,並以 front_z 為新串列的前端,其語法如下: 3.2.5 串列之合併(2) 3.2.6 釋放鏈結串列的空間 當我們在程式的執行過程中不再需要用到某個鏈結串列時,我們便需要將此鏈結串列所使用的空間加以釋放。詳細的C 語言程式片斷如下所列: 3.2.6 釋放鏈結串列的空間 3.2.7 列印(走訪)串列中所有節點的值 範例程式2:節點資料之排序(p.3-28) 範例程式3:串列之合併、串列之長度(p.3-36) 範例程式4:串列之合併 (使用rear指標) (p.3-43) 3.3 雙向鏈結串列 雙向鏈結串列包含了許多個節點以及紀錄節點間順序關係的鏈結。 一個雙向鏈結串列的節點包含三個欄位: (1).左鏈結欄位(Left Link Field, LLINK) : LLINK鏈結欄是用來指向前一個節點。 (2).資料欄位(Data Filed) : data資料欄仍然用來儲存資料。 (3).右鏈結欄位(Right Link Field, RLINK) : RLINK欄則用來指向下一個節點。 3.3 雙向鏈結串列 雙向鏈結串列的一個節點比起單向鏈結串列的一個節點需要更多的記憶體空間,因為雙向鏈結串列的節點有兩個鏈結欄位而單向鏈結串列的節點只有一個鏈結欄位。 雙向鏈結串列的優點為資料較不容易遺失;相對於單向鏈結串列或環狀串列萬一不幸其中有一個鏈結斷裂,那麼後面的串列資料便遺失而永遠無法再復原了。 3.3 雙向鏈結串列 以C語言為例,定義一個雙向鏈結串列之節點資料型態語法如下: 3.3 雙向鏈結串列 【範例】利用雙向鏈結串列結構來表示一組由小到大排序的六筆資料{5, 31,65, 78,83,98} 。 3.3 雙向鏈結串列 3.3 雙向鏈結串列 3.3

文档评论(0)

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

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

1亿VIP精品文档

相关文档