資料結構 老師:李崇明 助教:楊斯竣.

Slides:



Advertisements
Similar presentations
資料結構 – 鏈結串列 Linked List 綠園. 鏈結串列 -Linked List Linked List 是由許多相同資料型態的項目所組 成的有限序列。 可以把鏈結串列想像成火車,有多少人就只掛多 少節的車廂,需要車廂時再跟系統要一個車廂, 人少了就把車廂還給系統。 鏈結串列是有多少資料用多少記憶體空間,有新.
Advertisements

認識食品標示 東吳大學衛生保健組製作.
颞下颌关节常见病.
致理科技大學保險金融管理系 實習月開幕暨頒獎典禮
第三章 鏈結串列 Linked List 版權屬作者所有,非經作者 同意不得用於教學以外用途.
08 CSS 基本語法 8-1 CSS 的演進 8-2 CSS 樣式規則與選擇器 8-3 連結HTML 文件與CSS 樣式表
第三章 鏈結串列 Linked Lists.
第四章 數列與級數 4-1 等差數列與級數 4-2 等比數列與級數 4-3 無窮等比級數 下一頁 總目錄.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
Views ,Stored Procedures, User-defined Function, Triggers
DreamWeaver MX (II) 林偉川.
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
資料結構 第3章 鏈結串列.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置 4-2 鏈結串列的基礎 4-3 單向鏈結串列 4-4 環狀鏈結串列
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
鏈結串列 (Linked List).
資料結構與演算法 第四章 鍵結串列 徐熊健.
第11章 資料結構 – 使用C語言的模組 11-1 資料結構的基礎 11-2 C語言的模組化程式設計 11-3 基本鏈結串列
4.1 單項鏈結串列 4.2 環狀串列 4.3 雙向鏈結串列 4.4 鏈結串列之應用
Chapter 3 鏈結串列結構 資料結構導論 - C語言實作.
串列(List) 撰寫一串列程式.
Google Data API Spreadsheet
資料結構與C++程式設計進階 鏈結串列 講師:林業峻 CSIE, NTU 6/ 10, 2010.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
(Circular Linked Lists)
TCP/IP介紹 講師:陳育良 2018/12/28.
鏈結串列 (Linked List) 註:要會指標(Pointer)
第 六 章 鏈結串列(Link List) 課程名稱:資料結構 授課老師:________ 2019/1/2.
Ch03 鏈結串列結構 淡江大學 周清江.
學習 2019/1/12. 學習 2019/1/12 Chapter 3 鏈結串列結構 資料結構導論 - C語言實作.
資料結構使用Java 第8章 佇列(Queue).
4.1 單向鏈結串列 4.2 堆疊的加入與刪除 4.3 佇列的加入與刪除 4.4 其他型式的佇列
第三章 鏈結串列 3-1  單向鏈結串列 3-2 環狀鏈結串列 3-3 雙向鏈結串列.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
集合框架和泛型(一).
網頁程式設計 本章投影片錄自HTML5、CSS3、RWD、jQuery Mobile跨裝網頁設計 陳惠貞 著 碁峰資訊股份有限公司出版
Ch20. 計算器 (Mac 版本).
資料結構 優點 缺點 1 陣列 (Array) 沒有額外變量 (例head, next,...) 運作/操作較簡單 更新資料時,若要保持順序,需要移動較大量資料 靜態結構Static (宣告時已決定了陣列元素多少,不能在程式執行期間增減元素) 2 隊列Queue (FIFO) 容易更新 加入enqueue:
第 19 章 XML記憶體執行模式.
挑戰C++程式語言 ──第8章 進一步談字元與字串
如何使用Gene Ontology 網址:
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
樣版.
C qsort.
DRC with Calibre 課程名稱:VLSI 報告人:黃家洋 日期: 改版(蔡秉均) 1.
MicroSim pspice.
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
資料結構使用Java 第6章 鏈結串列(Linked List).
MiRanda Java Interface v1.0的使用方法
第14章 結構與其他資料形式.
陣列與結構.
Chapter 4 鏈結串列 Linked List 2019/5/14.
資料結構使用Java 第7章 堆疊(Stack).
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
動畫演示 Node規範了一些基本的方法,像是增加節點、刪除節點、讓節點做一些事、取得第n個節點等等
資料結構 – 鏈結串列 Linked List 綠園.
Brief Guide of FrontPage
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
資料結構使用Java 第5章 串列程式實作.
鏈結串列 Link List chapter 6 德明科技大學資訊科技系.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
SQLite資料庫 靜宜大學資管系 楊子青.
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
鏈結串列 (Linked List).
InputStreamReader Console Scanner
Presentation transcript:

資料結構 老師:李崇明 助教:楊斯竣

學習目標 認識鏈結串列的基本觀念與結構。 了解鏈結串列的基本運算。 知道如何以適當的方式來表示鏈結串列。 認識鏈結串列的應用與相關的演算法。

3.1 鏈結串列 (linked list) 的 基本結構與特性 載運旅客的火車把好幾個車廂一個接一個地連起來,靠火車頭的動力與車廂間的連結力來行駛,這種透過鏈結把相似個體連接起來的結構,就是一種鏈結串列。 火車的車廂一定都按照車廂號碼的順序排列,所以不管你從月台的哪個入口進站,只要知道目前所在的車廂位置,就一定能循序往前或往後找到自己要上的車廂。 列車長查票的時候也要從最前頭的車廂開始,依序到每一個車廂查票,才不會漏掉。

3.1.1 鏈結串列的基本結構 [鏈結串列的形成] [鏈結串列的節點結構] [單向鏈結串列(singly linked list)的定義]

[鏈結串列的形成] 鏈結串列的元素透過鏈結連接在一起,除了頭尾兩個元素以外,每個元素都有之前與之後的兩個相鄰的元素。 帶頭的元素之前沒有元素,之後則連接一個元素,最尾端的元素之前連接了一個元素,之後則沒有元素。

鏈結串列形成的實例

[鏈結串列的節點結構] 鏈結串列中的元素可以用一個節點來表示,節點包括兩個主要的部分 : 資料(data)與鏈結(link),鏈結儲存的是下一個節點的位址,下一個節點的鏈結則儲存下下一個節點的位址。

[單向鏈結串列(singly linked list) 的定義] 頭節點在結構上看起來跟其他的節點沒有什麼差異,但是前面沒有其他的節點。 尾節點的鏈結是空值(null),因為沒有下一個節點。

3.1.2 鏈結串列的基本特性 鏈結串列透過鏈結把元素串起來,元素越多則串列越龐大。 雖然串列中的元素有一定的順序,但是我們並沒有像陣列那樣用編號來加以區別。 串列中元素的增加與移除也不必按照特定的順序。

鏈結串列的特性(I)

鏈結串列的特性(II)

鏈結串列的特性(III)

3.2 鏈結串列的基本操作 鏈結串列也可以看成是一種串列,只是節點中多了記載其他節點位址的鏈結,多了鏈結的好處是可以透過鏈結來引用其他節點的資料,或是走訪整個串列。 一般的串列不用鏈結,必須靠陣列索引來存取節點的資料,鏈結串列有鏈結可用,所以有些操作就可以運用鏈結來進行。

3.2.1 頭節點的問題 鏈結串列中頭節點(header node)的使用具有十分特殊的意義,我們在概念上可以把頭節點看成跟其他的節點相同,但是在鏈結串列的實務上,頭節點的處理會跟串列中其他的節點不同,目的在於維持一般節點操作程序的一致性、提高效率。

[解決的辦法] 把頭節點當成特殊的節點來處理,不像其他的節點那樣專門用來儲存同類型的資料,頭節點裡可以記載一些與串列相關的資訊,例如串列中節點的數目。

[對於操作的影響] 在鏈結串列建立的時候馬上加入一個頭節點,格式與其他的串列節點一樣,但是不用來儲存資料,只是為了讓鏈結串列在節點的處理操作上有一致性、提高執行時的效能。

串列節點的插入 (insert) 節點可以插入到頭節點之後、尾節點之後,或是一般節點之後,但是不能插入到頭節點之前,這樣才能維持操作的一致性。下圖顯示如何將節點P插入到Pi之後。

串列節點的刪除 (delete) 規定串列的頭節點不能刪除,其他的節點都可以刪除。下圖顯示如何將節點P從串列中刪除。

3.2.2 基本操作 [鏈結串列的產生] [檢查鏈結串列是否為空的(isEmpty)] [插入節點(insert)] [刪除節點(delete)] [鏈結串列的走訪(traversal)]

[鏈結串列的產生] 鏈結串列是由節點所形成的,必須先產生節點,下面以ListNode類別來定義一個鏈結串列的節點,一個節點包含兩個主要的資料成員,即所儲存的資料(底下的data屬性)、以及指向下一個節點的鏈結(底下的link屬性) 。

[檢查鏈結串列是否為空的(isEmpty)] 簡單地說,只要鏈結串列中沒有任何節點就表示鏈結串列是空的,一個非空的鏈結串列至少要有一個節點。 串列的元素可以新增或刪除,所以有可能碰到串列沒有元素的情況,這時候存在的就是一個空串列。

[插入節點(insert)]

[刪除節點(delete)]

[鏈結串列的走訪(traversal)] 走訪有很多種目的,我們可能會走訪所有的節點,得到串列中節點的數目,代表串列的長度 (length);假如想知道串列是否有某個數值,也是要透過走訪,檢視串列元素中儲存的資料,這種操作可以稱為找尋(find)。

實作Linked List 使用Java Collections Framework中的Linked List類別實作。 Linked List在Java API架構中的位置: import java.util.*; 宣告Linked List物件 LinkedList <資料型態>物件名 = new LinkedList <資料型態>(); Linked List可以直接輸出 System.out.println(物件名);

插入尾端節點(addLast) 使用addLast方法可直接將元素插入原Linked List尾端 程式碼: 1. 產生新節點(data為元素值,link指向null) 2. 將原linked list最尾端link指向新節點。 程式碼: 物件名.add(元素); 例如:obj.addLast(“Joe”); Joe null John null

插入前端節點(addFirst) 執行步驟 程式碼: 1. 產生新節點(data為元素值,link指向null) 2. 將新節點的link指向原linked list最前端節點。 程式碼: 物件名.add(元素); 例如:obj.addFirst(“Allen”);

插入節點(add) 若無索引值,可將元素插入原Linked List尾端(功能與addLast相同) 1. 產生新節點(data為元素值,link指向null) 2. 將原linked list最尾端link指向新節點。 若有索引值,則可在索引值位置上插入節點 2. 新節點的link指向索引值位置的節點。 3. 索引值的前節點link指向新節點。 程式碼: obj.add(“Martin”); obj.add(1, “Richard”);

刪除尾端節點(removeLast) 刪除linked list中的最後節點 程式碼: 將倒數第2個節點的link改為null。 刪除最後節點(回收空間)。 程式碼: obj.removeLast();

刪除前端節點(removeFirst) 刪除linked list中的最前端節點 程式碼: 將開頭改為第2個節點。 刪除第1個節點(回收空間)。 程式碼: obj.removeFirst();

刪除節點(remove) 給予索引值或元素,刪除該索引值或元素之節點。 程式碼: 將欲刪除節點的前節點,指向下個節點。 刪除節點。(回收空間) 程式碼: obj.remove(“Joe”); obj.remove(1);

取得目前長度(size) 使用size方法取得目前鏈結串列長度 其他Linked List相關方法: obj.size(); 其他Linked List相關方法: http://download.oracle.com/javase/6/docs/api/java/util/LinkedList.html

-The End-