PowerPoint Presentation

Similar documents
陣列與鏈結串列 Array and Linked List

PowerPoint Presentation

資料結構之C語言重點複習

Excel VBA Excel Visual Basic for Application

先生別耍我

CC213

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

鏈結串列 有序串列 (ordered list) 有序串列代表的是一種資料結構, 它的元素以某種順序排列 ( 該順序具有一定的意義, 不可錯置 ) 在現實中, 我們很容易可以找到有序串列的實例, 如下 : 一年的月份 : ( 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八

四川省普通高等学校

本章內容 3-1 串列的定義 3-2 用陣列直接儲存串列 循序配置串列 3-3 串列加上鏈結 鏈結配置串列 3-4 用結構體陣列實作鏈結串列 3-5 指標與結構體 3-6 動態配置節點實作鏈結串列 3-7 鏈結串列的其他運算 3-8 環狀鏈結串列 3-9 雙向鏈結串列 *3-10 鏈結串列的應用 2

Linked Lists

Open topic Bellman-Ford算法与负环

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

ebook39-5

Microsoft Word - administrative-law-08.doc

<BABAD3EFD1D4CEC4D1A7D7A8D2B5D1A7C9FABBF1B5C3B8F7C0E0D7CAB8F1B4D3D2B5D6A4CAE9C7E9BFF6CDB3BCC6B1ED2E786C73>

投影片 1

上海地区进出口饲料和饲料添加剂经营单位备案名单

ebook14-4

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

7. 小 星 星 一 閃 一 閃 亮 晶 晶, 滿 天 都 是 小 星 星 ; 掛 在 天 空 放 光 明, 好 像 許 多 小 眼 睛 ; 一 閃 一 閃 亮 晶 晶, 滿 天 都 是 小 星 星

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

<4D F736F F F696E74202D A451A447A67EB0EAB1D0A74BB8D5A44ABEC7B8A8C249A4C0AA52BB50A7D3C440BFEFB6F1B5A6B2A4205BACDBAE65BCD2A6A15D>

(➂)11. 炎 炎 夏 日, 即 使 下 起 滂 沱 大 雨, 都 消 除 不 了 令 人 心 煩 的 暑 氣 這 句 話 主 要 想 表 達 什 麼? ➀ 夏 日 裡 經 常 下 著 滂 沱 大 雨, 令 人 心 煩 ➁ 下 著 滂 沱 大 雨 的 日 子, 可 以 消 除 暑 氣 ➂ 夏 日

高雄市立五福國民中學九十四學年度第一學期第三次段考二年級本國語文學習領域試題卷

人 物 春 秋 杨 永 泰 将 其 削 藩 策 略 概 括 为 : 以 经 济 方 法 瓦 解 冯 玉 祥 的 第 二 集 团 军, 以 政 治 方 法 解 决 阎 锡 山 的 第 3 集 团 军, 以 军 事 方 法 解 决 李 宗 仁 的 第 四 集 团 军, 以 外 交 方 法 对 付 张 学

台北老爺校外實地參訪結案報告


Microsoft Word 養生與保健_中山大學_講義


萬里社區老人健康照護手冊

Microsoft Word - 強制汽車責任保險承保及理賠作業處理辦法 doc

Microsoft Word - 06.Understanding of Pregnancy and Birth.doc

範本檔

附 件 一 : 办 理 集 中 式 银 期 转 账 业 务 网 点 名 单 序 号 地 区 网 点 名 称 地 址 联 系 人 电 话 23 工 商 银 行 安 徽 省 铜 陵 百 大 支 行 铜 陵 市 长 江 东 路 50 号 鲁 桂 珍 工 商 银 行 安 徽

2. 二 年 級 吳 毓 秀 老 師 : 感 謝 午 餐 公 司 平 時 均 能 準 時 送 餐, 但 希 望 能 不 要 使 用 加 工 品, 且 學 生 反 映 希 望 能 多 加 蛋 品 的 食 物 3. 三 年 級 柯 阿 青 老 師 : 雞 肉 有 血 水 味, 請 午 餐 公 司 能 調

糖尿病食譜

,,,,,,, (,, ),,,,,,,,,,,,,,, ,,, 4 11,, ( ),,,, ( ), :, ( ),,, 1995, 66 ; ( ),, 1996, , 3-4,,

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

秘密

untitled


PowerPoint 簡報

<4D F736F F D20AC4FBDBDA4FBB67DA96CAABA2DA743A67EAFC5AAA95FA7B9BD5A5F2E646F63>

ex

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

els0xu_zh_nf_v8.book Page Wednesday, June, 009 9:5 AM ELS-0/0C.8

untitled

<4D F736F F D203136BCADBBD8D2E4D3EBD1D0BEBF2E646F63>


Microsoft Word - 9pinggb_A4.doc

Microsoft Word - 9pinggb_A4-f4.doc

理 论 探 索 事 业 单 位 改 革 的 五 点 思 考 余 路 [ 摘 要 ] 事 业 单 位 改 革 是 中 国 改 革 的 重 要 环 节, 其 影 响 力 和 难 度 不 亚 于 国 有 企 业 改 革 本 文 着 重 围 绕 推 进 事 业 单 位 改 革 应 考 虑 的 五 个 方 面

2深化教育教学改革、创新人才培养模式

Microsoft Word - 9pinggb_let.doc

Microsoft Word - 9pingb5_let.doc

退休權益.ppt [相容模式]

Microsoft Word - 1.《國文》試題評析.doc

$%%& ()*+, %&, %-&&%%,. $ %,, $,, & /$- 0(1 $%%& %& 234 %-%, 5&%6&633 & 3%%, 3-%, %643 -%%% :::; 7<9; %-%, 3$%$ :::;

# $# #!# # # # # # # %# # # &# # # # #! "

2016 年 地 质 工 程 系 教 学 工 作 安 排 2016 学 年 我 系 将 在 总 结 过 去 工 作 的 基 础 上, 结 合 今 年 学 院 以 抓 质 量 强 内 涵 促 改 革 调 结 构 建 品 牌 细 管 理 重 过 程 为 宗 旨, 以 规 范 管 理 深 化 内 涵 为

实 习 上 下 点 表 格 解 释 和 相 关 纪 律 要 求 : 1 表 格 中 所 有 名 词 都 为 简 称, 包 括 医 院 名 称 四 年 级 五 年 级 各 专 业 名 称 等 所 有 时 间 都 为 学 生 装 好 行 李 出 发 时 间, 请 提 前 0 分 钟 将 行 李 运 到

简报158期.doc

礼仪玉和葬玉

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>

Microsoft Word - ACL chapter02-5ed.docx

Microsoft Word - 1HF12序.doc

Microsoft Word - 讀報看科普─人體篇_橫_.doc

Microsoft Word - 2B802內文.doc

鍟嗗搧瑙傚療鈥㈤挗鏉

東區校園中法治教育種子師資教學研習營

閱 讀 素 材 V.S 分 組 方 式 的 差 異 化 教 學 工 具 表 班 級 :( ) 閱 讀 素 材 V.S 分 組 方 式 獨 立 閱 讀 夥 伴 閱 讀 ( 同 質 性 ) 夥 伴 閱 讀 ( 異 質 性 ) 友 善 陪 伴 虛 心 受 教 國 語 日 報 新 聞 生 活 文 藝 兒 童

003 就 是 取 各 種 學 說 療 法 的 優 點 來 治 療 的 意 思, 我 兼 取 中 西 醫 理 人 體 生 理 解 剖 經 脈 穴 位 易 理 學 說 臨 床 經 驗 等 各 種 學 理 經 驗 的 優 點, 並 且 採 用 氣 功 薰 臍 耳 穴 手 足 推 拿 按 摩 等 十 餘

CC213

Microsoft PowerPoint - Model Checking a Lazy Concurrent List-Based Set Algorithm.ppt [Compatibility Mode]

100

<4D F736F F D D2D AB4FA5C0A448ADFBB3E6A440AFC5C0CBA977B8D5C344B2C4A447B3A1A5F75FB6C25F2E646F63>

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Transcription:

資料結構 (Data Structures) Course 4: Link Lists ( 鏈結串列 ) 授課教師 : 陳士杰 國立聯合大學資訊管理學系

Outlines 本章重點 Link List s Def. 與 Array 的比較 Link List 之基本操作 (Insert, Delete) Link list 的種類 : Single Link List ( 單向鏈結串列 ) Circular Link List ( 環狀鏈結串列 ) Double Link List ( 雙向鏈結串列 ) Link List 常見的三個運作 Length ( 計算串列長度 ) Concatenate ( 連結兩個串列 ) Invert ( 反轉 ) Storage Pool 2

Linked List Concepts Def: 由一組節點 (Node) 所組成的有序串列, 各 Node 除了 Data 欄之外, 另外有 1 個 Link 欄 ( 或稱 Pointer), 用以指向其它 Node 之位址 例 : 單向鏈結串列之節點 : struct node /* 串列結構宣告 */ { int data; /* 資料 */ struct node *next; /* 指標, 指向下一個節點 */ }; 3

Linked list 的特質 : 各 Node 不一定要佔用連續的 Memory 空間 各 Node 之型態 (Data Type) 不一定要相同 僅支援 Sequential Access Insert/Delete Node 容易 4

Link list 的種類 : Single Link List ( 單向鏈結串列 ) Circular Link List ( 環状鏈結串列 ) Double Link List ( 雙向鏈結串列 ) 5

Single Linked List ( 單向鏈結串列 ) Def: 由一組節點 (Node) 所組成的有序串列, 各 Node 除了 Data 欄之外, 另外有 1 個 Link 欄 ( 或稱 Pointer), 用以指向 下一個 Node 之位址 範例 : 名為 phead 之單向鏈結串列 ( 視首節點或首指標之名稱為何而定 ) 6

Linked List Algorithms Create List Insert Node Delete Node 在一些鏈節串列運作中, 我們可能會設定其它輔助用的指標!! 7

Create List 以 list 為名的空串列 : 以指標作為串列首 : list null 8

Insert Node 將資料 item 插入在串列 list 中的節點 x 之後 x list 2 1 t item 9

begin New(t); // 跟系統要求記憶體空間以配置一個新節點, 且讓指標 t 指向該節點 t data = item; // 把 item 塞到這個新節點 t 的 Data 欄位中 1 t link = x link; // 先把新節點 t 掛到 x 節點之後!! 2 x link = t; // 再將 x 節點接到節點 t end 10

例 : 插入資料 20 在節點 x 之前 x list 限制 : 不准用迴圈指令, 且動作需於 O(1) 常數時間完成 Ans: x begin New(t); t data = x data; t link = x link; x link = t; x data = 20; x = t; end; list t Data 20 Data 11

Delete Node 刪除鏈節串列的節點時, 會先 1 改變串列指標, 以做到邏輯性移除 (Logically Remove) 的動作, 2 再將要被移除的節點做實際刪除 (Physically Delete) 的動作, 讓節點從記憶體中刪除 需要兩個輔助指標 x 與 ppre x 用以指向欲刪除的節點,pPre 指向節點 x 所 在之前一個 node 例 : 刪除串列 list 中之節點 x, Case 1: ( 要砍第一個 node)-- 若 x 為第一個 node, 則令 ppre = Case 2: ( 要砍串列中間的 node) list list x 2 ( 回收 ) list 1 ppre x ppre 2 ( 回收 ) 1 12

begin 1 if (ppre = ) then // 表示 x 為第一個節點 list = x link; else // 表示 x 節點是中間節點 ppre link = x link; 2 Ret(x); // 將 節點 x 回收. 有的書是用 delete(x), release(x), dispose(x) etc. end 13

Circularly Linked Lists ( 環狀鏈結串列 ) Def: 將 Single link list 中, 最後一個 node 的指標指回第 一個 node. 圖示 : list 14

特質 : 不論從哪個 Node 開始, 必定能夠拜訪 ( 經過 ) 所有 Node. 並無明顯的頭尾節點 Single Link List 必須從頭開始才可以 回收整個串列的時間為 O(1). ( 即 : 與 Link list 長度無關 ) Single Link List 回收時間為 O(n). 其中, n 為長度或 Node 數目. 15

Single Linked List: 回收時間的比較 ( 單向 vs. 環狀 ) list 3 S 1 2 AV Procedure Release list(list: pointer to S.L.) begin end if (list ) then S = list; 1 while (S link( ) ) do S = S link; 2 S link = AV; 3 AV = list; // 回收節點至 AV list AV list 中 //while 迴圈會讓 S 一直前進至最後一節點 Time = O(n) 16

Circular Linked List C: P 1 C AV 2 3 AV Procedure Release C(C: pointer to S.L.) begin end if (C ) then 1 p = C link; 2 C link = AV; 3 AV = P; // 只動了三個指標!! Time = O(1) 17

Doubly Linked List ( 雙向鏈結串列 ) Def: 串列中各節點除了 Data 欄之外, 另外有 2 個 Link 欄, 用以指向 前一個與下一個節點之位址 圖示 : LLink Data LLink: Pointer 指向前一個 Node. RLink: Pointer 指向後一個 Node. RLink 18

一般使用雙向鏈結串列時, 通常會加入串列首 (Head Node), 此 Node 不存資料 - 此時, 雙向鏈結串列可視為 2 個 Circular Link List. 19

插入 Node t 在 Node x 之後 Doubly Linked List Insertion x 3 2 4 1 begin end 1 t RLink = x RLink; 2 t LLink = x; 3 (x RLink) RLink) LLinkLLink = t; 4 x RLink = t; t 須改變 4 個指標 20

Doubly Linked List Deletion 刪除一個節點 x 1 x 3 ( 回收 ) 2 begin end 1 (x LLink) LLink) RLink = x RLink; 2 (x RLink) RLink) LLinkLLink = x LLink ; 3 Ret(x); 須改變 2 個指標 21

Double linked list 與 Single linked list 的比較 Double Single 優 可立即知道前後 Node 所在 只知道前 ( 或後 ) Node 所在 缺 刪除 Node 時, 不須給前一個 Node 必須給前一個 Node 之位置 任何一個 Node 開始, 必可經過所有 Nodes 可靠度高 一定要從第一個 Node 開始 可靠度低, 萬一指標斷裂, 串列一分為二,Data lost 缺 插入節點麻煩 ( 須改變 4 個指標 ) 容易 ( 只改變 2 個指標 ) 優 刪除節點麻煩 ( 須改變 2 個指標 ) 容易 ( 只改變 1 個指標 ) Link 所需的空間較大 較少 22

動作 : Link list 三個常見的動作 Length ( 求串列長度 ) Concatenate ( 串列連結 ) Invert ( 反轉 ) 討論對象 : Single linked list Circular linked list 共有 6 個主要的 Algorithm 23

For Single linked list : Length list count++; P //p 不為空 () 時, 則 count 加 1,, 以讓 p 往下跑 Procedure Length list(list: pointer to S.L.) begin count = 0; p = list; while (p ) ) do begin count++; p = p link; end; return count; end Time: O(n) 24

For Circular linked list C : C p Procedure Length C(C: pointer to S.L.) begin if (C = ) then return 0; else begin count = 0; p = C; repeat // 不能用 while 迴圈!! 一定至少要做一次!!! count++; p = p link; until p = C; C end; end Time: O(n) 25

For Single Linked List 假設連結 A, B 串列成為 C 串列 : Concatenate Case 1: A = and B, 則 C = B. Case 2: A and B =, 則 C = A. Case 3: A and B, 則 C = A+B. Case 4: A = and B =, 則 C =. C A 3 B p 1 2 26

Procedure Con.two.S(A, B, C: pointer to S.L.) begin C = ; if (A = and B ) then C = B; //Case 1 else if (A and B = ) then C = A; //Case 2 else if (A and B ) then //Case 3 begin p = A; 1 while(p link link ) do p = p link; 2 p link = B; 3 C = A; end; Time: O(n) 或 O(m) return C; // 回傳 Case 1~4 的結果 (m, n 分別為 A, B 串列的長度 ) end 看 p 是在哪條串列上跑!!! 27

For Circular Linked List 假設連結 A, B 串列成為 C 串列 : Case 1: A = and B, 則 C = B. Case 2: A and B =, 則 C = A. Case 3: A and B, 則 C = A+B. Case 4: A = and B =, 則 C =. C 1 A B 3 2 相當於 28

Procedure Con.two.S(A, B, C: pointer to C.L.) begin C = ; if (A = and B ) then C = B; //Case 1 else if (A and B = ) then C = A; //Case 2 else if (A and B ) then //Case 3 begin 1 C = A link; 2 A link = B link; 3 B link = C; end; return C; // 回傳 Case 1~ 4 的結果 Time: O(1) end ( 沒有任何的迴圈指令, 只有指標的改變 ) 29

Invert For Single Linked List 需要三個指標 : r, q, p r 跟著 q 走,q 跟著 p 走,p 往前進 1 2 q r r s s p q p 3 s r q p 4 s r q s p P 跑到 時結束, 同時 S 要指向 q 30

Procedure Invert S(S: pointer to S.L.) begin end p = S; q = ; while (p ) do begin r = q; //r 一開始會在此被設為 q = p; p = p link; q link = r; end; S = q; //S 可能指向反轉後的第一個節點反轉後的第一個節點或是 null list Time: O(n) 31

For Circular Linked List 亦需要三個指標 : r, q, p r 跟著 q 走,q 跟著 p 走,p 往前進 1 r C q p 2 C r q p 3 C p r q 4 C p r q C P 跑到 C 時結束, 同時 C 要指向 q 32

Procedure Invert C(C: pointer to C.L.) begin if (C ) then begin p = C link; //p 指向 C 的下一個 node q = C; // 初值 while (p c) do begin r = q; q = p; p = p link; q link = r; end; C link = q; C = q; end; end Time: O(n) 33

Array 與 Link List 的比較 Link List Array 優 元素佔用非連續性的 Memory Space 佔用連續性的空間 缺 各 node 之 data type 不一定相同 各元素型態皆須一致 使用之前無須事先宣告大小, 可任意增 / 刪空間 Insert/Delete 元素較易, 花費 O(1) ( 只更改指標即可 ) 資料共享易達成 ( 指標指到相同位址即可 ) 串列分裂 合併容易 大小必須事先宣告, 無法任意增 / 刪空間 較難, 花費 O(n) ( 須挪移元素 ) 不易達成 ( 兩個獨立 Array 不易做資料共享, 只能複製資料到另一個 Array) 缺僅支援 Sequential Access 可支援 Random 與 Sequential Access 優 循序讀取慢 ( 要先讀取指標, 才能取出下一個 node) 需要額外的 Link 空間需求 可靠度低 ( point 斷裂, 資料 lost) 較難 快 沒有 高 34

利用 Single link list 表示多項式 假設 f(x) = 5x 8 +4x 3 +2x+9, 請用 Single link list 表示 Ans: Node Structure 設計如右 : coe exp link coe: Coefficient( 係數 ); exp: Exponent( 指數 ); link: Pointer 表示如下 : f 5 8 4 3 2 1 9 0 假設 f(x) = 5x 4 y 2 +8x 3 y+9xy, 請用 Single link list 表示 Ans: Node Structure 設計如右 : coe x - exp y exp link coe: Coefficient( 係數 ); exp: Exponent( 指數 ); link: Pointer 表示如下 : f 5 4 2 8 3 1 9 1 1 35

補充 36

Storage Pool Def: 可用節點 (Free Node) 之集合 ( 集中管理之處 ), 通常 O.S. 以 Single link list 來管理 Free Nodes, 稱為 AV-list (Available list). AV 需提供二個運作 : New(t): 相當於刪除 AV-list 中 Free Node. (if AV-list ) Ret(t): 相當於 Insert 節點到 AV-list 中. 37

New(t) AV t 1 AV 2 begin if (AV ) then begin 1 t = AV; 2 AV = AV link link; end; else print( No Free Node. ); end 38

Ret(t) AV 2 1 t begin 1 t link = AV; 2 AV = t; end 39

存取節點資料的表示方式 若單一節點是由指標 t 指向該節點 : t Data Link t Data: 存取指標 t 所指向之節點中的 data 值 t Link: 存取指標 t 所指向之節點中的 link 值 40

Ex: t 50 20 80 60 null p q r Print(p Data) = 20 Print((p Link) Data) = 80 r 相當於 q Link 或 (p link) link 將 p 的下一個 node 改指向 r 節點 =(p link) r 41