陣列 Array chapter 3 德明科技大學資訊科技系.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
MATLAB 程式設計 時間量測 清大資工系 多媒體資訊檢索實驗室.
陣列與字串 Java陣列特性 一維陣列 多維陣列 字串 字串的相關函數 字串緩衝器類別.
Chapter 2 陣列 2.1 陣列表示法 2.2 C 語言的陣列表示法 2.3 矩陣 2.4 多項式表示法
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
C/C++基礎程式設計班 陣列 (Array)
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
主題五 CPU Learning Lab.
Chapter 5 迴圈.
資料結構 Data Structure.
第2章 陣列與結構 (Arrays and Structures)
資料結構 第2章 陣列.
資料結構 第3章 鏈結串列.
第十一章 結構.
Chapter 2 陣列結構 資料結構導論 - C語言實作.
簡易C++除錯技巧 長庚大學機械系
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
第10章 陣列與清單控制項.
列舉(enum).
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
串列(List) 撰寫一串列程式.
Introduction to the C Programming Language
SQL Stored Procedure SQL 預存程序.
Chapter 2 陣列結構 資料結構導論 - C語言實作.
第二章 鏈結串列 2-1 線性串列 2-2 認識陣列 2-3 矩陣的簡介與運算 2-4 陣列與多項式.
Chap 2 Array (陣列).
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
|12 結構與列舉型態.
第一單元 建立java 程式.
陣列(Array).
資料結構 優點 缺點 1 陣列 (Array) 沒有額外變量 (例head, next,...) 運作/操作較簡單 更新資料時,若要保持順序,需要移動較大量資料 靜態結構Static (宣告時已決定了陣列元素多少,不能在程式執行期間增減元素) 2 隊列Queue (FIFO) 容易更新 加入enqueue:
陣列
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
ASP基礎— VBScript基本語法 張森.
第 2 章 陣列(Array)與矩陣(Matrix)的運算
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
程式設計 博碩文化出版發行.
挑戰C++程式語言 ──第8章 進一步談字元與字串
認識常數與變數 學習C++所提供的各種基本資料型態 瞭解溢位的發生 學習認識資料型態之間的轉換
向量 (vector) 就是典型的一維陣列,而更高維的矩陣,例如矩陣 (matrix) 和張量 (tensor) 則分別是二維和三維的陣列。
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
第2章 資料結構與演算法的關係 Java程式複習
C qsort.
微積分 第二次上機 Matlab 教學 2007/10/30 陳逸嬿.
第14章 結構與其他資料形式.
陣列與結構.
第 三 章 陣 列 課程名稱:資料結構 授課老師:________ 2019/5/15.
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
例題 1. 多項式的排列 1-2 多項式及其加減法 將多項式 按下列方式排列: (1) 降冪排列:______________________ (2) 升冪排列:______________________ 排列 降冪:次數由高至低 升冪;次數由低至高.
實習八 函式指標.
1757: Secret Chamber at Mount Rushmore
資料表示方法 資料儲存單位.
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
資料結構使用Java 第5章 串列程式實作.
Introduction to the C Programming Language
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
SQLite資料庫 靜宜大學資管系 楊子青.
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
Introduction to the C Programming Language
快取映射 之直接對映 計算整理.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

陣列 Array chapter 3 德明科技大學資訊科技系

陣列的觀念 陣列是指一群變數之集合,具有 若要存取陣列中的變數, 我們只需要透過陣列的編號(註標、索引)來指定變數即可 相同名稱 相同資料型態 若要存取陣列中的變數, 我們只需要透過陣列的編號(註標、索引)來指定變數即可 陣列與變數的功能都是用來儲存資料 每一個變數只能儲存一項資料,而陣列可以同時連續儲放多項資料, 陣列一次可宣告很多個變數,而不用一個一個宣告 陣列可以少寫許多行程式,並且搭配迴圈可重複執行相同指令運算 德明科技大學資訊科技系

陣列的觀念 p3-2 【說明】 A陣列表示內共有5個陣列元素,也就是有5個變數,分別為A[0]、A[1]、A[2]……A[4] (2)每一個陣列元素可以存放一筆資料 (3)陣列內容的存取,通常是以迴圈指令配合輸入或輸出指令來進行,如下片段程式 德明科技大學資訊科技系

陣列的宣告 p3-5 【語法】資料型態 陣列名稱[陣列大小]; 【說明】 (1)「陣列名稱」的命名規則和一般變數相同 (2)「陣列大小」必須是一數字 宣告三個變數(A,B,C)為整數型態 int A, B, C; 宣告一個A[3]的陣列: int A[3]; //宣告一維陣列A,共有A[0]、A[1]、A[2]三個元素此時,主記憶體就會即時配置3個位置 德明科技大學資訊科技系

使用陣列的優缺點 優點 缺點 欲避免陣列的缺點,一般使用動態記憶體配置,即指標的方式建置陣列 利用索引值(Index)可以快速的存取資料 搭配迴圈一次可以處理大批的資料 較容易表達資料處理的技巧 缺點 資料新增刪除比較麻煩 記憶體配置在宣告陣列時就固定,缺乏彈性 欲避免陣列的缺點,一般使用動態記憶體配置,即指標的方式建置陣列 運作較為複雜,在鏈結串列時介紹 德明科技大學資訊科技系

陣列儲存方式 p3-7 【舉例】宣告一個A[3]的陣列,並分別儲存10, 20, 30 int A[3]; A[0]=10; //指把10指定給A陣列中的第0項的資料中 A[1]=20; A[2]=30; 【變化】陣列比變數有彈性,使用時索引可以是各種變化 如果變數 x=1,則A[x] = 20; 也可以用 A[x*2]=30; 如果B[0]=1,則A[B[0]]=20; 德明科技大學資訊科技系

請依序輸入六位同學的成績到陣列中,並計算及輸出 總和 p3-7 【舉例】 請依序輸入六位同學的成績到陣列中,並計算及輸出 總和 p3-7 未使用for迴圈演算法 德明科技大學資訊科技系

請依序輸入六位同學的成績到陣列中,並計算及輸出 總和 int A[6]; p3-8 【舉例】 請依序輸入六位同學的成績到陣列中,並計算及輸出 總和 int A[6]; p3-8 使用for迴圈演算法 德明科技大學資訊科技系

使用陣列的注意事項 不能夠一次讀取或指定整個陣列的資料 p3-9 寫一個程式,利用A陣列來存放數字10 直覺想法:以下的方法是錯誤 int A[10]; A=10; 不能直接指定給陣列名稱 德明科技大學資訊科技系

使用陣列的注意事項 用來指定某一項資料的索引不能超過陣列的註標範圍 例如:int A[50]; // 宣告一個陣列A其索引是從0~49 德明科技大學資訊科技系

陣列的初值設定 p3-10 在宣告陣列的同時並指定初值,其方法只要等號(=)在後面接著大括號,將初值寫在括號內,初值間以逗號隔開即可。 【語法】資料型別 陣列名稱[ ] ={陣列初值串列}; 德明科技大學資訊科技系

二維陣列的觀念 p3-11 【語法】資料型態 陣列名稱[M][N]; 【說明】M代表列數,N代表行數 【例如】int Score[4][5]; //列索引表示範圍: 0~3 共有4列 //行索引表示範圍: 0~4 共有5行 德明科技大學資訊科技系

多維陣列的觀念 p3-14 【語法】資料型態 陣列名稱[L][M][N]; 【說明】L代表二維陣列個數: M代表列數, N代表行數 【例如】int Score[3][4][5]; //二維陣列的個數: 0~2 共有3個二維陣列 //列索引表示範圍: 0~3 共有4列 //行索引表示範圍: 0~4 共有5行 【說明】此例子中Score陣列共有三個索引,故Score陣列是一個三維陣列。宣告Score是由3個(0~2)二維陣列,每個二維陣列包含4列(0~3),5行(0~4)組合而成的整數三維陣列。並且共計有3×4×5=60元素。 德明科技大學資訊科技系

德明科技大學資訊科技系

陣列在記憶體中的表示法 陣列 宣告: int list[5]; 相同資料型態在記憶體內連續的空間 每個元素其實有自己的位址 如果每個元素大小為 d 個bytes list[0] 19 21 5 115 28 list[0] 的位址是 X list[1] list[1] 的位址是 X + 1 × d list[2] list[2] 的位址是 X + 2 × d list[3] : list[4] list[k] 的位址是 X + k × d 德明科技大學資訊科技系

一維陣列在記憶體中的表示法 p3-17 若陣列A有N個元素,其陣列的起始位址為Lo,並且索引值從0開始,d 為元素大小,則A[i]的起始位置為多少? 以C語言宣告方式:int A[N]; 令:Lo為起始位址 d為元素大小 則A[i]之位置計算 = Lo + i * d 德明科技大學資訊科技系

一維陣列在記憶體中的表示法 若陣列A的索引從L到U,其陣列的起始位址為Lo,d為元素大小,則A[i]的起始位置為多少? 則A[i]之位置計算= Lo + (i-L) * d 德明科技大學資訊科技系

【舉例】假設每一個整數佔用2個byte,若A陣列的起始位址是100開始,則A[5]的起始位址為多少? 令:Lo=100 d=2 德明科技大學資訊科技系

有一整數陣列int A[60]; 則此陣列共佔多少位元組(設sizeof(int)=2)?若A[0]在記憶體中的位址為03C416,則元素A[20] 的位址為何? A陣列共佔 60 × 2 = 120 (bytes) A[20] 的位址 = A[0] 的位址 + 位移量 = 03C416 + (20 – 0 ) × 2 = 03C416 + 2816 = 03EC16 A[39] 的位址 = A[0] 的位址 + 位移量 = 03C416 + (39 – 0 ) × 2 = 03C416 + 4E16 = 041216  A[0] A[1] 位移量 A[2] ﹋ ﹋ ﹋ ﹋ A[20] ﹋ ﹋ ﹋ ﹋ A[59] 德明科技大學資訊科技系

練習 題目 int A[1000],每個整數以2 bytes儲存資料。假設A[0]的地址是100116,請問A[i]的地址是? float A[1000] ,每個實數以4 bytes儲存資料。假設A[100]的地址是101116,請問A[900]的地址是? 在一維陣列的題目中,計算參數有 每個元素大小, ex: 2 or 4 起點位址, ex: A[0] 目標元素, ex: A[i] or A[900] 德明科技大學資訊科技系

二維陣列在記憶體中的表示法 p3-19 宣告方式:A[0…M-1, 0…N-1] M代表列數(Row): 橫向;N代表行數(Column): 縱向,共M*N格 舉例:圖的儲存位置:A[1,4] △圖的儲存位置:A[2,1] 圖的儲存位置:A[M-1,N-2] 將二維陣列儲存的邏輯位置轉換成實際在主記憶體的存儲方式 以列為主 以行為主 德明科技大學資訊科技系

以列為主 Row Major 以列為主的二維陣列要轉為一維陣列 將二維陣列「由上往下」一列一列讀入一維陣列 p3-20 德明科技大學資訊科技系

以列為主 Row Major 令Lo為起始位址 d為元素大小 則A[i,j]的位置=Lo+[i*N+j]*d 德明科技大學資訊科技系

以行為主 Column Major 以行為主的二維陣列要轉為一維陣列 將二維陣列「由左往右」一行一行讀入一維陣列 p3-23 德明科技大學資訊科技系

以行為主 Column Major 令Lo為起始位址 d為元素大小 則A[i,j]的位置=Lo+[j*M+i]*d 德明科技大學資訊科技系

二維陣列的四個題型 p3-26 以下 德明科技大學資訊科技系

陣列的應用 需要多個相同型態的資料變數時,就是使用陣列的時機 多項式表示與計算 矩陣運算 矩陣表示 v 矩陣轉置 v 稀疏矩陣 特殊矩陣(上三角、對角矩陣) 德明科技大學資訊科技系

矩陣 數學上一個m x n的矩陣,包含m個列與n個行,正好由m x n的二維陣列所表示 數學上的矩陣有非常多的用途 p3-34 數學上一個m x n的矩陣,包含m個列與n個行,正好由m x n的二維陣列所表示 int A[2][3]; //可代表 2x3的矩陣 直接以兩層迴圈處理 數學上的矩陣有非常多的用途 在程式設計上大部分都以陣列為資料結構 德明科技大學資訊科技系

矩陣轉置 一個矩陣Am × n,則矩陣B是A的轉置矩陣 B矩陣的第i列第j行的元素等於A矩陣的第j列第i行的元素 Bij=Aji p3-35 德明科技大學資訊科技系

矩陣轉置 演算法 德明科技大學資訊科技系

矩陣加法 假設A,B都是(m × n)矩陣,則A與B可以相加並得到一個C矩陣(m × n p3-38 在C矩陣上的第i列第j行的元素必定等於A矩陣的第i列第j行的元素加上B矩陣的第i列第j行的元素 Cij= Aij+Bij 德明科技大學資訊科技系

矩陣加法 例如 演算法 德明科技大學資訊科技系

矩陣乘法 假設A為(m × n)矩陣,而B為(n × p)矩陣,則A與B相乘得到C矩陣(m × p) 在C矩陣上的第i列第j行的元素必定等於A矩陣的第i列乘上B矩陣的第j行 兩個向量的內積 德明科技大學資訊科技系

德明科技大學資訊科技系

德明科技大學資訊科技系

矩陣乘法 演算法 德明科技大學資訊科技系