Implementing Data Structures

Slides:



Advertisements
Similar presentations
Divide-and-Conquer. 什麼是 divide-and-conquer ? Divide 就是把問題分割 Conquer 則是把答案結合起來.
Advertisements

6-1 指標簡介 6-2 指標與陣列 6-3 動態配置記憶體 6-4 本章綜合練習
布林代數的應用--- 全及項(最小項)和全或項(最大項)展開式
第七章 抽樣與抽樣分配 蒐集統計資料最常見的方式是抽查。這 牽涉到兩個問題: 抽出的樣本是否具有代表性?是否能反應出母體的特徵?
學習C++的基本語法 認識關鍵字與識別字的不同 學習程式碼偵錯的流程 學習如何提高程式的可讀性
:Word Morphing ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10508:word morphing 解題者:楊家豪 解題日期: 2006 年 5 月 21 日 題意: 第一行給你兩個正整數, 第一個代表下面會出現幾個字串,
Instructor: Ching-Chi Lin 林清池 助理教授
3Com Switch 4500 切VLAN教學.
Reference, primitive, call by XXX 必也正名乎 誌謝 : 部份文字取於前輩 TAHO 的文章.
Graph V(G 1 )={0, 1, 2, 3, 4, 5, 6, 7, 8, 9} E(G 1 )={(0, 2), (0, 3), (1, 4), (2, 3), (2, 5), (2, 6), (3, 6), (3, 7), (4, 7), (5, 6), (5,
:New Land ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11871: New Land 解題者:施博修 解題日期: 2011 年 6 月 8 日 題意:國王有一個懶兒子,為了勞動兒子,他想了一個 辦法,令他在某天早上開始走路,直到太陽下山前,靠.
第一章 變數、常數及資料型態. 變數 C 程式語言的變數名稱 第一個字必須是英文字母或底線 (_) 之後可以是數字, 英文字母或底線 (_) 不可以是保留字 例: Num (Ο) _score (Ο) C&C (X) 8num (X)
: ShellSort ★★☆☆☆ 題組: Problem D 題號: 10152: ShellSort 解題者:林一帆 解題日期: 2006 年 4 月 10 日 題意:烏龜王國的烏龜總是一隻一隻疊在一起。唯一改變烏龜位置 的方法為:一隻烏龜爬出他原來的位置,然後往上爬到最上方。給 你一堆烏龜原來排列的順序,以及我們想要的烏龜的排列順序,你.
STAT0_sampling Random Sampling  母體: Finite population & Infinity population  由一大小為 N 的有限母體中抽出一樣本數為 n 的樣 本,若每一樣本被抽出的機率是一樣的,這樣本稱 為隨機樣本 (random sample)
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
JAVA 程式設計與資料結構 第十四章 Linked List. Introduction Linked List 的結構就是將物件排成一列, 有點像是 Array ,但是我們卻無法直接經 由 index 得到其中的物件 在 Linked List 中,每一個點我們稱之為 node ,第一個 node.
Course 0 課程介紹 Introduction
MATLAB 程式設計 第 11 章 多維陣列 多維陣列的定義 在 MATLAB 的資料型態中,向量可視為 一維陣列,矩陣可視二維陣列,對於維 度 (Dimensions) 超過 1 的陣列則均可視 為「多維陣列」 (Multidimesional Arrays , 簡稱 N-D Arrays)
程式註解說明. 2 程式註解格式 塊狀註解 對檔案、 class 、 method 、資料結構、一段程式 …. 等程式區塊 做說明。 第一行的開頭必需為 “/*” 且沒有其他文字,最後一行的開頭 必需以 “*/” 做為結束,在中間每一行的開頭都必需是一個 “*” 。 單行註解 佔據一整行的說明。 以.
8.1 何謂高度平衡二元搜尋樹 8.2 高度平衡二元搜尋樹的加入 8.3 高度平衡二元搜尋樹的刪除
Chapter 07 低階程式語言.
JAVA 程式設計與資料結構 第十章 GUI Introdution III. File Chooser  File Chooser 是一個選擇檔案的圖形介面, 無論我們是要存檔還是要開啟檔案,使 用這個物件都會讓我們覺得容易且舒適。
Introduction to Java Programming Lecture 5: Using Java Classes : String & Math Spring 2009.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
1 第四章 多變數函數的微分學 § 4.1 偏導數定義 定義 極限值 ■. 2 定理 極限值的基本定理 (1) 極限值的唯一性 : 若 存在,則 其值必為唯一。 (2) 若 且 ( 與 為常數 ) , 則 且 為常數且.
Chapter 13 塑模靜態觀點:物件圖 Static View : Object Diagram.
Introduction to Java Programming Lecture 17 Abstract Classes & Interfaces.
第九章 結構. 結構的宣告 結構 它是由許多不同 ( 或相同 ) 資料型態的變數所組成的 集合,通常利用結構標籤稱呼此集合 struct student { char *name; int score; }; struct 為保留字,表示結構的宣告開始 結構項目需定義於大括號「 { } 」內 結尾需加上分號.
24-6 設定開始與結束場景中的 程式 最後我們要替這個遊戲收個尾, 幫它把開始 的等待畫面跟結束畫面處理一下。
: The largest Clique ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11324: The largest Clique 解題者:李重儀 解題日期: 2008 年 11 月 24 日 題意: 簡單來說,給你一個 directed.
計算機概論 - 排序 1 排序 (Sorting) 李明山 編撰 ※手動換頁.
最新計算機概論 第 5 章 系統程式. 5-1 系統程式的類型 作業系統 (OS) : 介於電腦硬體與 應用軟體之間的 程式,除了提供 執行應用軟體的 環境,還負責分 配系統資源。
7 陣列與搜尋 7.1 陣列 一般資料變數 宣告一維陣列 起始一維陣列 7-4
Chapter 20 塑模動態觀點:狀態圖 Statechart Diagram. 學習目標  說明狀態圖的目的  定義狀態圖的基本記號  展示狀態圖的建構  定義活動、內部事件及遞延事件的狀態 圖記號.
: Fast and Easy Data Compressor ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10043: Fast and Easy Data Compressor 解題者:葉貫中 解題日期: 2007 年 3.
Chapter 2 Getting Started Insertion Sort: 能有效率地排序小數字的演算法 範例 :
第十章 再論結構. 指標與結構的關係 /* File name: ex10-1a.c */ #include int main() { struct student { char *name; int score; }; struct student st= {"Brian", 97}; struct.
: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義.
:Nuts for nuts..Nuts for nuts.. ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 10944:Nuts for nuts.. 解題者:楊家豪 解題日期: 2006 年 2 月 題意: 給定兩個正整數 x,y.
資料結構實習-一 參數傳遞.
第六章 陣列.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
計算機概論 演算法與程式語言 李明山.
4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本
Multi - Language 鄭傑仁 陳彥如. Preface 大三下時,經由系上安排進入一間製作 IP phone 的公司實 習,公司所生產的 IP phone 提供很廣泛的設定 ( 例如 : 韌體 資訊、網路設定、 SIP 設定、語音設定等 ) ,為了方便使用 者設定或查詢這些選項,話機本身都內建了.
: Beautiful Numbers ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11472: Beautiful Numbers 解題者:邱經達 解題日期: 2011 年 5 月 5 日 題意: 若一個 N 進位的數用到該.
Section 4.2 Probability Models 機率模式. 由實驗看機率 實驗前先列出所有可能的實驗結果。 – 擲銅板:正面或反面。 – 擲骰子: 1~6 點。 – 擲骰子兩顆: (1,1),(1,2),(1,3),… 等 36 種。 決定每一個可能的實驗結果發生機率。 – 實驗後所有的實驗結果整理得到。
Image Interpolation Use SSE 指導教授 : 楊士萱 學 生 : 楊宗峰 日 期 :
JAVA 程式設計與資料結構 第二十章 Searching. Sequential Searching Sequential Searching 是最簡單的一種搜尋法,此演 算法可應用在 Array 或是 Linked List 此等資料結構。 Sequential Searching 的 worst-case.
資料結構實習-二.
演算法 8-1 最大數及最小數找法 8-2 排序 8-3 二元搜尋法.
845: Gas Station Numbers ★★★ 題組: Problem Set Archive with Online Judge 題號: 845: Gas Station Numbers. 解題者:張維珊 解題日期: 2006 年 2 月 題意: 將輸入的數字,經過重新排列組合或旋轉數字,得到比原先的數字大,
介紹不同坐標系之間的轉換 以LS平差方式求解坐標轉換參數
© The McGraw-Hill Companies, Inc., 2006© The McGraw-Hill Companies, Inc., 2007 Chapter 4 IP 定址:分級式定址.
Chapter 10 m-way 搜尋樹與B-Tree
本章重點 2-1 有序串列(Ordered List) 2-2 介紹陣列(array) 2-3 矩陣(matrix)的應用
Probability Distribution 機率分配 汪群超 12/12. 目的:產生具均等分配的數值 (Data) ,並以 『直方圖』的功能計算出數值在不同範圍內出現 的頻率,及繪製數值的分配圖,以反應出該 機率分配的特性。
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
: Problem E Antimatter Ray Clearcutting ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11008: Problem E Antimatter Ray Clearcutting 解題者:林王智瑞.
Visual C++重點複習.
資料結構實習-六.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2008.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
: Finding Paths in Grid ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11486: Finding Paths in Grid 解題者:李重儀 解題日期: 2008 年 10 月 14 日 題意:給一個 7 個 column.
著作權所有 © 旗標出版股份有限公司 第 14 章 製作信封、標籤. 本章提要 製作單一信封 製作單一郵寄標籤.
計 算 機 概 論 Chapter 10 作業系統. Ch010 作業系統 2 學習目標  描述作業系統的兩個主要任務  定義記憶體及程序管理  解釋邏輯位址與實體位址間的關係  基礎:第 5.2 節 范紐曼 電腦架構  ( 第 5 章講義第 頁 )
幼兒行為觀察與記錄 第八章 事件取樣法.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
: How many 0's? ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11038: How many 0’s? 解題者:楊鵬宇 解題日期: 2007 年 5 月 15 日 題意:寫下題目給的 m 與 n(m
節能轉接插座 認知科學研究所陳啟彰. 設計緣起 不使用的電器如未將插頭拔除, 仍會有少量的電力損耗,這類的 電力損耗稱之為待機損耗 (stand- by loss) 。 不使用的電器如未將插頭拔除, 仍會有少量的電力損耗,這類的 電力損耗稱之為待機損耗 (stand- by loss) 。 家庭用電中,待機損耗約佔總耗.
Presentation transcript:

Implementing Data Structures 資料結構實做

Storing Arrays 儲存陣列 有點類似「表格」概念,每一格儲存我們要的資訊

Homogeneous Arrays 同質陣列 長方形的資料區塊每一項有相同性質

Homogeneous Arrays Row-major order versus column major order Address polynomial for each of them is continuous 由列與行來儲存的,例如:4列*4行= 16個儲存空間,並且編號是連續的。

Figure 8.5 int Readings[24]; // 宣告一個可存24個整數的空間(陣列) The array of temperature readings stored in memory starting at address x int Readings[24]; // 宣告一個可存24個整數的空間(陣列) 位址 記憶單位

Figure 8.5 67 int Readings[24]; // 宣告一個可存24個整數的空間(陣列) Readings[4]67; The array of temperature readings stored in memory starting at address x int Readings[24]; // 宣告一個可存24個整數的空間(陣列) Readings[4]67; 位址 67 記憶單位

多維陣列

多維陣列 int a[5]; 一維陣列

多維陣列 int a[5]; 一維陣列 int b[5][5]; 二維陣列

多維陣列 int a[5]; 一維陣列 int b[5][5]; 二維陣列 int c[5][5][5]; 三維陣列

多維陣列 int a[5]; 一維陣列 int b[5][5]; 二維陣列 int c[5][5][5]; 三維陣列 int d[5][5][5][5]; int e[5][5][5][5][5]; ...... 那這些多維的你能想像嗎! ?

Row-major (row by row) Column major (column by column) 個整數的空間(陣列)

Row-major (row by row) Column major (column by column) 個整數的空間(陣列)

ex:FORTRAN Row-major (row by row) Column major (column by column) 個整數的空間(陣列) ex:Pascal, C/C++, Java, C# ex:FORTRAN

ex:FORTRAN Row-major (row by row) Column major (column by column) ex:Pascal, C/C++, Java, C# ex:FORTRAN 0 1 2 3 x x+1 x+2 x+3 x+4 x+5 x+6 x+7 x+8 x+9 x+10 x+11 x+12 x+13 x+14 x+15 1 2 1 2 3 4 x x+4 x+8 x+12 x+1 x+5 x+9 x+13 x+2 x+6 x+10 x+14 x+3 X+7 x+11 x+15 1 2 3

Address polynomial int a[r][c] //宣告一個r(row行) *c(column列) 的二維陣列 1 ...... c a[1][1] a[1][c] 2 a[2][1] a[2][c] 3 a[3][1] a[3][c] r a[r][1] a[r][c]

Address polynomial int a[r][c] //宣告一個r(row行) *c(column列) 的二維陣列 1 我的位址是x 1 ...... c a[1][1] a[1][c] 2 a[2][1] a[2][c] 3 a[3][1] a[3][c] r a[r][1] a[r][c]

Address polynomial int a[r][c] //宣告一個r(row行) *c(column列) 的二維陣列 1 我的位址是x 1 ...... c a[1][1] a[1][c] 2 a[2][1] a[2][c] 3 a[3][1] a[3][m] a[i][j] r a[r][1] a[r][c] 那我呢???

Address polynomial int a[r][c] //宣告一個r(row行) *c(column列) 的二維陣列 1 ...... c a[1][1] a[1][c] 2 a[2][1] a[2][c] 3 a[3][1] a[3][c] a[i][j] r a[r][1] a[r][c] x (row major order) a[i][j]的位址 :  x+c*(i-1)+(j-1)

Address polynomial int a[r][c] //宣告一個r(row行) *c(column列) 的二維陣列 1 ...... c a[1][1] a[1][c] 2 a[2][1] a[2][c] 3 a[3][1] a[3][c] a[i][j] r a[r][1] a[r][c] x (row major order) a[i][j]的位址 :  x+c*(i-1)+(j-1) Address polynomial 位址多項式

Example int a[3][4] 1 2 3 4 target x

Example Row-major order x+4*(2-1)+(3-1)=x+6 int a[3][4] x 1 2 3 4 target x

Example Row-major order x+4*(2-1)+(3-1)=x+6 Column-major order int a[3][4] Row-major order x+4*(2-1)+(3-1)=x+6 Column-major order x+3*(3-1)+(2-1) =x+7 1 2 3 4 target x

Figure 8.6 int Readings[4][5]; // 宣告一個可存4*5個整數的空間(陣列) A two-dimensional array with four rows and five columns stored in row major order int Readings[4][5]; // 宣告一個可存4*5個整數的空間(陣列) 概念性陣列 機器之記憶體 第3列第4行之值

Figure 8.6 int Readings[4][5]; // 宣告一個可存4*5個整數的空間(陣列) A two-dimensional array with four rows and five columns stored in row major order int Readings[4][5]; // 宣告一個可存4*5個整數的空間(陣列) x+1 x+2 x+3 x+4 x+5 x+6 x+7 x+8 x+9 x+10 x+11 x+12 x+13 x+14 x+15 x+16 x+17 x+18 x+19 x+20 位址 概念性陣列 機器之記憶體 第3列第4行之值

Heterogeneous arrays 異質陣列 每一項可能不同類型稱作文件

Heterogeneous arrays Components can be stored one after the other in a contiguous block Components can be stored in separate locations identified by pointers 它儲存在連續的空間,他也可以用指標分開來儲存在不同的位置,應用在struct/class

Figure 8.7 Storing the heterogeneous array Employee a.陣列儲存在連續區間 b.陣列組件儲存在分開區間

Figure 8.7 Storing the heterogeneous array Employee a.陣列儲存在連續區間 個別項目通常被稱為元件(components) b.陣列組件儲存在分開區間

Storing Lists 儲存列表 例如儲存一串名字的list到電腦主記憶體之中

Contiguous list 連續串列 優點:靜態時為便利的儲存結構 缺點:動態下極存不便

Figure 8.8 Names stored in memory as a contiguous list 記憶單位連續區塊 第一名稱儲存區塊

linked list 鏈結串列 簡單說:將各list的入口用pointer連結起來 儲存在分散的記憶單元裡 - 頭指標(head pointer):指標指到串列的開端 - 空指標(NLT pointer):最後一項指標中放NIL

linked list 鏈結串列 簡單說:將各list的入口用pointer連結起來 儲存在分散的記憶單元裡 - 頭指標(head pointer):指標指到串列的開端 - 空指標(NLT pointer):最後一項指標中放NIL NIL

Figure 8.9 The structure of a linked list 頭指標 名稱 指標 空指標

linked list 可說是一系列node(節點)連結 A B C  Head linked list 可說是一系列node(節點)連結 每個節點至少包含 data (資料) 指到下一個節點的指標 node A data pointer

Figure 8.10 Deleting an entry from a linked list 頭指標 刪除的項目 舊指標 名稱 指標 名稱 指標 新指標 空指標

B A C 將 A 節點的連結指標指向 C

Figure 8.11 Inserting an entry into a linked list 頭指標 新增的項目 新指標 新指標 新指標 新指標 名稱 指標 舊指標 空指標

將 B 節點的連結指標指向 C (node.next) 將 A (node)節點的連結指標指向 B

將 B 節點的連結指標指向 C (node.next) 將 A (node)節點的連結指標指向 B 步驟不能交換!!! Why?

Storing Stacks and Queues 儲存堆疊及佇列

Stack 堆疊 FILO : (First-In,Last-Out)先進後出

Stack 堆疊 FILO : (First-In,Last-Out)先進後出 記憶體需保留些連續區塊以供成長及縮小 頂端位置在保留記憶體區塊中前後移動,其單元稱 stack pointer

Figure 8.12 A stack in memory 保留區塊的記憶單元 堆積的基底 堆積項目 供成長的空間 堆積指標

Example

Example Push 紅球

Example Push 綠球

Example Push 藍球

Example Pop

Example

Example Pop

Example

Example Pop

Example

Queue 佇列 FIFO : (First-In,First-Out) 先進後出

Queue 佇列 FIFO : (First-In,First-Out) 先進後出 以連續記憶體區塊做保留二單元做指標 (head pointer頭指標 & tail pointer尾指標)

Figure 8.13 A queue implementation with head and tail pointers. Note how the queue crawls through memory as entries are inserted and removed. a.空佇列 b.插入項目A,B,C之後 c.移除項目A插入D之後 d.移除項目B插入E之後

缺點 queue若不作控制,記憶體緩慢移動,且經過地方所存的資料被摧毀 改善方法 環狀序列(circular queue)

Figure 8.14 A circular queue containing the letters P through V (最後一個單元連到第一個單元) 實際的queue儲存結構

Figure 8.14 A circular queue containing the letters P through V A B C Head 概念性的queue儲存結構 (最後一個單元連到第一個單元) 實際的queue儲存結構

Storing Binary Trees 儲存二元樹

Storing Binary Trees 儲存二元樹

Storing Binary Trees 儲存二元樹 每個節點=資料+左右孩子指標 Left child pointer Right child pointer

Storing Binary Trees 儲存二元樹 每個節點=資料+左右孩子指標 通過根節點指標來做存取

Figure 8.15 The structure of a node in a binary tree 包含資料的記憶單元 左子指標 右子指標

Figure 8.16 概念性的樹 The conceptual and actual organization of a binary tree using a linked storage system 實際的儲存結構

Figure 8.16 概念性的樹 The conceptual and actual organization of a binary tree using a linked storage system 根節點 實際的儲存結構

Figure 8.16 A B C D E F NIL NIL NIL NIL NIL NIL

Figure 8.17 A tree stored without pointers 概念性的樹 實際的儲存結構 根節點 樹第二層中的節點 樹第三層中的節點

Figure 8.18 A sparse, unbalanced tree shown in its conceptual form and as it would be stored without pointers 概念性的樹 實際的儲存結構 根 第二層 第三層 第四層

Figure 8.18 A sparse, unbalanced tree shown in its conceptual form and as it would be stored without pointers 概念性的樹 實際的儲存結構 太浪費記憶體空間了!!! 根 第二層 第三層 第四層

靜態 vs 動態結構 靜態結構比動態結構易於管理, 且可直接存取(動態須由指標一個指一個) 靜態加入、刪除及合併時,必須做大量資料的移動;動態則只須要改變指標即可

Manipulating Data Structures 資料結構的操作 藉由事先已定義的程序(procedure)來完成資料結構的操作 Example : stack 堆疊最少需要 push(堆入)和 pop(移除) 兩個 procedures來完成操作

Figure 8.19 A procedure for printing a linked list

Figure 8.19 A procedure for printing a linked list 可以將鏈結串列的名單列出

The end