資料結構 第3章 鏈結串列.

Slides:



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

第三章 鏈結串列 Linked List 版權屬作者所有,非經作者 同意不得用於教學以外用途.
22.3 实际问题与一元二次方程(1).
第三讲 匀变速直线运动 学 科:物 理 主讲人:吴含章. 第三讲 匀变速直线运动 学 科:物 理 主讲人:吴含章.
第三章 鏈結串列 Linked List.
第三章 鏈結串列 Linked Lists.
第二章 线性表 1 线性表的逻辑结构及其基本操作 2 线性表的顺序存储结构 3 线性表的链式存储结构 4 静态链表 5 应用实例.
第5节 关注人类遗传病.
資料結構與C++程式設計進階 資料結構概論 講師:林業峻 CSIE, NTU 6/ 7, 2010.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
資料結構 第2章 陣列.
Chap5 Graph.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
Linked List Operations
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
單向鏈結串列 Singly Linked Lists.
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置 4-2 鏈結串列的基礎 4-3 單向鏈結串列 4-4 環狀鏈結串列
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
資料結構 第5章 佇列.
鏈結串列 (Linked List).
資料結構與演算法 第四章 鍵結串列 徐熊健.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
4.1 單項鏈結串列 4.2 環狀串列 4.3 雙向鏈結串列 4.4 鏈結串列之應用
Chapter 3 鏈結串列結構 資料結構導論 - C語言實作.
串列(List) 撰寫一串列程式.
·线性表的定义及ADT ·线性表的顺序存储结构 ·线性表的链接存储结构 · 单向循环链表 · 双链表、双向循环链表 · 一元多项式的加法
Chap 4 鏈結串列 Linked Lists.
第2章 线性表(三) 1/.
第12章 樹狀搜尋結構 (Search Trees)
資料結構與C++程式設計進階 鏈結串列 講師:林業峻 CSIE, NTU 6/ 10, 2010.
第十五章 Linked List, Stack and Queue
(Circular Linked Lists)
鏈結串列 (Linked List) 註:要會指標(Pointer)
第 六 章 鏈結串列(Link List) 課程名稱:資料結構 授課老師:________ 2019/1/2.
Ch03 鏈結串列結構 淡江大學 周清江.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
學習 2019/1/12. 學習 2019/1/12 Chapter 3 鏈結串列結構 資料結構導論 - C語言實作.
4.1 單向鏈結串列 4.2 堆疊的加入與刪除 4.3 佇列的加入與刪除 4.4 其他型式的佇列
第三章 鏈結串列 3-1  單向鏈結串列 3-2 環狀鏈結串列 3-3 雙向鏈結串列.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
資料結構 第4章 堆疊.
第三章 链表 单链表 (Singly Linked List) 循环链表 (Circular List) 多项式及其相加
Chapter 4 資料結構.
Chapter 4 資料結構.
陣列(Array).
資料結構 優點 缺點 1 陣列 (Array) 沒有額外變量 (例head, next,...) 運作/操作較簡單 更新資料時,若要保持順序,需要移動較大量資料 靜態結構Static (宣告時已決定了陣列元素多少,不能在程式執行期間增減元素) 2 隊列Queue (FIFO) 容易更新 加入enqueue:
第三章 链表 单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵.
第一章 直角坐標系 1-2 直角坐標.
Linked Lists Prof. Michael Tsai 2013/3/12.
挑戰C++程式語言 ──第8章 進一步談字元與字串
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
資料結構 老師:李崇明 助教:楊斯竣.
樣版.
九年级 上册 22.3 实际问题与二次函数 (第1课时).
1. 志明打算就客戶服務開發一個語音互動(IVR)系統, 顧客可透過電話鍵盤與系統進行互動。
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
資料結構使用Java 第6章 鏈結串列(Linked List).
第14章 結構與其他資料形式.
陣列與結構.
Chapter 4 鏈結串列 Linked List 2019/5/14.
動畫演示 Node規範了一些基本的方法,像是增加節點、刪除節點、讓節點做一些事、取得第n個節點等等
資料結構 – 鏈結串列 Linked List 綠園.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
資料結構使用Java 第5章 串列程式實作.
鏈結串列 Link List chapter 6 德明科技大學資訊科技系.
鏈結串列 (Linked List).
資料結構 Data Structure (資管二)
Presentation transcript:

資料結構 第3章 鏈結串列

3-1 單向鏈結串列 串列 (list) 是一群相同類型的元素依照一定順序排列而成的有序集合,通常表示成 (item0, item1, …, itemn-1)。 串列常見的運算如下 : 讀取 (retrieve) 寫入 (store) 取代 (replace) 插入 (insert) 刪除 (delete) 搜尋 (search) 走訪 (traverse) 取得長度 (find length)

使用陣列存放串列 (2, 3, 5, 7, 11, 13) 及其優缺點 使用鏈結串列存放串列 (2, 3, 5, 7, 11, 13) 及其優缺點

3-1-1 宣告節點的結構 typedef struct node{ int data; struct node *next; 3-1-1 宣告節點的結構 typedef struct node{ int data; struct node *next; }list_node; typedef list_node *list_pointer; data next

3-1-2 插入節點 在目前節點 (current) 的前面插入一個新節點 (ptr),其步驟如下: 配置記憶體空間 掛上新節點的鏈結 3-1-2 插入節點 在目前節點 (current) 的前面插入一個新節點 (ptr),其步驟如下: 配置記憶體空間 掛上新節點的鏈結 ptr = (list_pointer)malloc(sizeof(list_node)); ptr->data = 50; ptr->next = current;

改變舊節點的鏈結 previous->next = ptr;

3-1-3 建立串列 建立串列的首要步驟必須將串列初始化,然後一一將新節點插入串列,而且新節點可以插入串列的前端、尾端或任意位置 (例如依照data欄位的值由大到小排列)。

3-1-4 刪除節點 若要刪除目前節點 (current),其步驟如下: 改變舊節點的鏈結 釋放記憶體空間 3-1-4 刪除節點 若要刪除目前節點 (current),其步驟如下: 改變舊節點的鏈結 釋放記憶體空間 previous->next = current->next; free(current);

3-1-5 串列長度 串列長度指的是串列的節點個數,但不包含首節點,以下面的串列為例,它的長度為3。

3-1-6 串列連接 串列連接指的是將兩個串列連接成一個串列,下面是一個例子。

3-1-7 串列反轉 串列反轉指的是將串列的鏈結方向反轉過來,下面是一個例子。

3-1-8 環狀鏈結串列 環狀鏈結串列的運算和單向鏈結串列大致相同,但是多了一個優點,無論您從環狀鏈結串列的哪個節點出發,都能拜訪所有節點 (繞一圈即可) 。

3-2 雙向鏈結串列 線性雙向鏈結串列 (linear doubly linked list) 3-2 雙向鏈結串列 線性雙向鏈結串列 (linear doubly linked list) 環狀雙向鏈結串列 (circular doubly linked list)

3-2-1 宣告節點的結構 typedef struct dnode{ struct dnode *llink; int data; 3-2-1 宣告節點的結構 typedef struct dnode{ struct dnode *llink; int data; struct dnode *rlink; }dlist_node; typedef dlist_node *dlist_pointer; llink data rlink

3-2-2 插入節點 若要在目前節點 (current) 的前面插入一個新節點 (ptr),其步驟如下: 配置記憶體空間 掛上新節點的鏈結 3-2-2 插入節點 若要在目前節點 (current) 的前面插入一個新節點 (ptr),其步驟如下: 配置記憶體空間 掛上新節點的鏈結 ptr = (dlist_pointer)malloc(sizeof(dlist_node)); ptr->data = 50; (1)ptr->llink = current->llink; (2)ptr->rlink = current;

改變舊節點的鏈結 (3)current->llink->rlink = ptr; (4)current->llink = ptr;

3-2-3 刪除節點 若要刪除目前節點 (current),其步驟如下: 3-2-3 刪除節點 若要刪除目前節點 (current),其步驟如下: current->llink->rlink = current->rlink; current->rlink->llink = current->llink; free(current);

3-3 鏈結串列的應用 鏈結串列本身不僅是資料結構,更可以用來實作其它抽象資料型別 (ADT),包括多項式、矩陣、串列、堆疊、佇列、樹、圖形…。例如將多項式非零項的結構宣告成如下: typedef struct pnode{ int coef; int exp; struct pnode *next; }poly_node; typedef poly_node *poly_ptr; coef exp next

以A(X) = 8X4 - 6X2 + 3X5 + 5、B(X) = 2X6 + 4X2 + 1和C(X) = A(X) + B(X)為例,可以表示成如下:

計算C(X) = A(X) + B(X) 的過程如下: