大綱 陣列 結構和聯結 多項式抽象資料型態 稀疏矩陣抽象資料型態 上三角和下三角表示法.

Slides:



Advertisements
Similar presentations
1 生物計算期末作業 暨南大學資訊工程系 2003/05/13. 2 compare f1 f2  只比較兩個檔案 f1 與 f2 ,比完後將結果輸出。 compare directory  以兩兩比對的方式,比對一個目錄下所有檔案的相 似程度。  將相似度很高的檔案做成報表輸出,報表中至少要.
Advertisements

6-1 指標簡介 6-2 指標與陣列 6-3 動態配置記憶體 6-4 本章綜合練習
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
Chapter 10 馬可夫鏈 緒言 如果讀者仔細觀察日常生活中所發生的 諸多事件,必然會發現有些事件的未來 發展或演變與該事件現階段的狀況全然 無關,這種事件稱為獨立試行過程 (process of independent trials) ;而另一些 事件則會受到該事件現階段的狀況影響。
布林代數的應用--- 全及項(最小項)和全或項(最大項)展開式
第七章 抽樣與抽樣分配 蒐集統計資料最常見的方式是抽查。這 牽涉到兩個問題: 抽出的樣本是否具有代表性?是否能反應出母體的特徵?
密碼學與網路安全 第4章 有限體.
第二章 太陽能電池的基本原理 及其結構 2-1 太陽能電池的基本原理 2-2 太陽能電池的基本結構 2-3 太陽能電池的製作.
Advanced Chemical Engineering Thermodynamics
1.1 線性方程式系統簡介 1.2 高斯消去法與高斯-喬登消去法 1.3 線性方程式系統的應用(-Skip-)
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 日 題意:國王有一個懶兒子,為了勞動兒子,他想了一個 辦法,令他在某天早上開始走路,直到太陽下山前,靠.
Chapter 2 聯立線性方程式與矩陣 緒言 線性方程式組 (systems of linear equations) 出現 在多數線性模式 (linear model) 中。根據以往解 題的經驗,讀者們也許已發現方程式的解僅與 該方程式的係數有關,求解的過程也僅與係數 的運算有關,只要係數間的相關位置不改變,
STAT0_sampling Random Sampling  母體: Finite population & Infinity population  由一大小為 N 的有限母體中抽出一樣本數為 n 的樣 本,若每一樣本被抽出的機率是一樣的,這樣本稱 為隨機樣本 (random sample)
5.1 Rn上之長度與點積 5.2 內積空間 5.3 單範正交基底:Gram-Schmidt過程 5.4 數學模型與最小平方分析
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
JAVA 程式設計與資料結構 第十四章 Linked List. Introduction Linked List 的結構就是將物件排成一列, 有點像是 Array ,但是我們卻無法直接經 由 index 得到其中的物件 在 Linked List 中,每一個點我們稱之為 node ,第一個 node.
MATLAB 程式設計 第 11 章 多維陣列 多維陣列的定義 在 MATLAB 的資料型態中,向量可視為 一維陣列,矩陣可視二維陣列,對於維 度 (Dimensions) 超過 1 的陣列則均可視 為「多維陣列」 (Multidimesional Arrays , 簡稱 N-D Arrays)
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
Monte Carlo Simulation Part.2 Metropolis Algorithm Dept. Phys. Tunghai Univ. Numerical Methods C. T. Shih.
第一章 演算法:效率、分析與量級 1.1演算法 1.2發展有效率演算法的重要性 1.3演算法的分析 1.4量級(Order)
2009fallStat_samplec.i.1 Chap10 Sampling distribution (review) 樣本必須是隨機樣本 (random sample) ,才能代表母體 Sample mean 是一隨機變數,隨著每一次抽出來的 樣本值不同,它的值也不同,但會有規律性 為了要知道估計的精確性,必需要知道樣本平均數.
資料結構實習-四.
Introduction to Java Programming Lecture 5: Using Java Classes : String & Math Spring 2009.
© The McGraw-Hill Companies, Inc., 2008 第 6 章 製造流程的選擇與設計.
第 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 為保留字,表示結構的宣告開始 結構項目需定義於大括號「 { } 」內 結尾需加上分號.
最新計算機概論 第 5 章 系統程式. 5-1 系統程式的類型 作業系統 (OS) : 介於電腦硬體與 應用軟體之間的 程式,除了提供 執行應用軟體的 環境,還負責分 配系統資源。
3-3 使用幾何繪圖工具 Flash 的幾何繪圖工具包括線段工具 (Line Tool) 、橢圓形工具 (Oval Tool) 、多邊星形 工具 (Rectangle Tool) 3 種。這些工具畫出 來的幾何圖形包括了筆畫線條和填色區域, 將它們適當地組合加上有技巧地變形與配 色, 不但比鉛筆工具簡單,
7 陣列與搜尋 7.1 陣列 一般資料變數 宣告一維陣列 起始一維陣列 7-4
: Fast and Easy Data Compressor ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10043: Fast and Easy Data Compressor 解題者:葉貫中 解題日期: 2007 年 3.
3.1 矩陣的行列式 3.2 使用基本運算求行列式 3.3 行列式的性質 3.4 特徵值介紹 3.5 行列式的應用
選舉制度、政府結構與政 黨體系 Cox (1997) Electoral institutions, cleavage strucuters, and the number of parties.
Fugacity Coefficient and Fugacity
: 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.
觀測量的權 權的觀念與計算.
公用品.  該物品的數量不會因一人的消費而受到 影響,它可以同時地被多人享用。 角色分配  兩位同學當我的助手,負責:  其餘各人是投資者,每人擁有 $100 , 可以投資在兩種資產上。  記錄  計算  協助同學討論.
: 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 種。 決定每一個可能的實驗結果發生機率。 – 實驗後所有的實驗結果整理得到。
函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷. 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果.
JAVA 程式設計與資料結構 第二十章 Searching. Sequential Searching Sequential Searching 是最簡單的一種搜尋法,此演 算法可應用在 Array 或是 Linked List 此等資料結構。 Sequential Searching 的 worst-case.
演算法 8-1 最大數及最小數找法 8-2 排序 8-3 二元搜尋法.
Learning Method in Multilingual Speech Recognition Author : Hui Lin, Li Deng, Jasha Droppo Professor: 陳嘉平 Reporter: 許峰閤.
Chapter 10 m-way 搜尋樹與B-Tree
演算法課程 (Algorithms) 國立聯合大學 資訊管理學系 陳士杰老師 Course 7 貪婪法則 Greedy Approach.
第五章 內積空間 5.1 Rn上之長度與點積 5.2 內積空間 5.3 單範正交基底:Gram-Schmidt過程
本章重點 2-1 有序串列(Ordered List) 2-2 介紹陣列(array) 2-3 矩陣(matrix)的應用
第4章 有限體.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
2005/7 Linear system-1 The Linear Equation System and Eliminations.
SQL 進階查詢.
連續隨機變數 連續變數:時間、分數、重量、……
函式 Function 東海大學物理系‧資訊教育 施奇廷. 函式簡介 當程式越來越大、越複雜時,程式的維護、 除錯會變得更困難,此時必須引入函式來 簡化程式或將程式分段,將程式重複的部 分改寫為函式,將程式「模組化」 這種作法有下列優點:節省程式發展的時 間、邏輯容易瞭解、程式容易除錯、可分 工合作完成程式.
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.
Mapping - 1 Mapping From ER Model to Relational DB.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2009.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
Presentation transcript:

Data Structure in C ─ 陣列與結構

大綱 陣列 結構和聯結 多項式抽象資料型態 稀疏矩陣抽象資料型態 上三角和下三角表示法

陣列 陣列是一組序對,<index,value>,其中每一個索引(index)定義了一個相關連的值(value) 陣列的宣告 int list[5], *plist[5]; 記憶體配置 (一維陣列)

陣列的抽象資料型態(ADT:abstract data type)(是一種資料型態,它的組織方式使得物件的規格與物件上的運算之規格和該物件的內部表示法與運算的實作法是獨立的)

二維陣列 若有一二維陣列是A[0:u1-1, 0:u2-1],表示此陣列有u1列及u2行,也就是每一列是由u2個元素組成。二維陣列化成一維陣列時,對應方式有兩種:(1)以列為主,(2)以行為主 以列為主:視此陣列有u1個元素(0, 1, 2,…,u1-1),每一元素有u2個單位,每個單位佔d個空間A(i, j) = l0+i*u2d+j*d 以行為主:視此陣列有u2個元素(0, 1, 2,…,u2-1),每一元素有u1個單位,每個單位佔d個空間A(i, j) = l0+j*u1d+i*d

三維陣列 若有一三維陣列是A[0:u1-1, 0:u2-1, 0:u3-1]。一般三維陣列皆先化為二維陣列後,再對應到一維陣列,對應方式也有兩種:(1)以列為主,(2)以行為主

三維陣列 (續) 以列為主:視此陣列有u1個u2 * u3的二維陣列,每一個二維陣列有u2個元素,每個u2皆有u3d個空間A(i, j,k) = l0+i*u2u3d+j*u3d+k*d

三維陣列 (續) 以行為主:視此陣列有u3個u1 * u2的二維陣列,每一個二維陣列有u2個元素,每個u2皆有u1d個空間A(i, j,k) = l0+k*u1u2d+j*u1d+i*d

n維陣列 若有一n維陣列是A[0:u1-1, 0:u2-1, 0:u3-1, … , 0:un-1]。同樣地,n維陣列亦有兩種表式方法:(1)以列為主,(2)以行為主 參考課本pp.2-9~2-10

結構和聯結 結構是將不相同型態的資料群集在一起 聯結的宣告與結構類似,但union中的欄位必須共用記憶空間 Ex. struct { char name[10]; int age; float salary; } person; 聯結的宣告與結構類似,但union中的欄位必須共用記憶空間 Ex. Union { int children; int bread; } u;

結構和聯結 自我參考結構(self-referential structure)是一種結構,其中的一個或多個組成元素是指向自身的指標 通常需要動態記憶管理程式(malloc和free)來明確地取得或釋回記憶體 Ex. Type struct list { char data; list *link; };

多項式抽象資料型態 何謂多項式? Ex. A(x)=3x20+2x5+4與B(x)=x4+10x3+3x2+1  axe,其中x是變數,a是係數,而e是指數多項式最大的指數指稱為次方(degree),等於0的係數不必寫出,指數為0的項目不必寫出數 多項式加法 A(x) + B(x) = (ai+bi)xi 多項式乘法 A(x) * B(x) = (aixi *  (bjxj))

多項式的ADT

多項式抽象資料型態 (續) 在C中表示多項示的方法是使用typedef建立polynomial型態 #define MAX_DEGREE 101 /*Max degree of polynomial+1*/ typedef struct{ int degree; float coef[MAX_DEGREE]; } polynomial;  若a的型態是polynomial,且n<MAX_DEGREE, 則多項式A(x)= 可表示為: a.degree=n a.coef[i]=an-i, 0 i n

多項式抽象資料型態 (續) 若多項式是稀疏的,係數不為0的項次個數相對於係數為0的項次個數是很小時,會有記憶體浪費的現象 #define MAX_TERMS 100 /*size of terms array*/ typedef struct{ float coef; int expon; } polynomial; Polynomial terms[MAX_TERMS]; int avail=0;

多項式抽象資料型態 (續) Ex. 將A(X)=2x1000+1和B(X)=x4+10x3+3x2+1相加

void padd (int starta, int finisha, int startb, int finishb, int void padd (int starta, int finisha, int startb, int finishb, int *stard, int *finishd) { /* add A(x) and B(x) to obtain D(x) */ float coefficient; *startd=avail; while (starta<= finisha && startb <= finishb) switch(COMPARE(terms[starta].expon, terms[startb].expon)) case –1: /* a expon < b expon*/ attach(terms[startb].coef, terms[startb].expon); startb++; break; case 0: /* equal exponents*/ coefficient = terms[starta].coef+terms[startb].coef;

if (coefficient) attach(coefficient, terms[starta].expon); starta++; startb++; break; case –1: /* a expon > b expon*/ attach(terms[starta].coef, terms[starta].expon); } /* add in remaining terms of A(x)*/ for( ; starta<=finisha; starta++) /* add in remaining terms of B(x)*/ for( ; startb<=finishb; startb++) attach(terms[startb].coef, terms[startb].expon); *finishd=avail-1;

void attach(float coefficient, int exponent) { /* add a new term to the polynomial*/ if(avail>=MAX_TERMS) { fprintf(stderr,”Too many terms in the polynomial\n”); exit(1); } terms[avail].conf = coefficient; terms[avail].expon = exponent; avail++;

稀疏矩陣抽象資料型態 在數學上,一個矩陣包含m列和n行的元素。一般寫為m × n,表示矩陣有m列n行,共有mn個元素。若m = n,矩陣為一方陣 在計算機科學上,一個矩陣的標準表示法為二維陣列,定義為a[MAX_ROWS][MAX_COLS] 若矩陣中包含了許多的0,我們稱為“稀疏矩陣”。而多少0少能算是稀疏?並沒有明絶對的定對。一般而言,大於1/2個就可稱之

稀疏矩陣抽象資料型態 (續) 稀疏矩陣表示法 #define MAX_TERMS 101 /*maximum number of terms +1*/ typedef struct{ int col; int row; int value; } term; term a[MAX_TERMS]; 若將稀疏矩陣以陣列a表示,a[0].row為列數, a[0].col為行數,而a[0].value為全部不為0之元素個數。另外,a[1]~a[8]是儲存代表不為0的元素。

稀疏矩陣抽象資料型態 (續)

稀疏矩陣 的ADT

稀疏矩陣抽象資料型態 (續) 轉置矩陣是將矩陣的行與列互換。也就是將矩陣中的每個元素a[i][j]變成轉置矩陣中的元素b[j][i]

void transpose(term a[], term b[]) /* b is set to the transpose of a */ { int n, i, j, currentb; n = a[0].value; /* total number of elements */ b[0].row = a[0].col /* rows in b = columns in a */ b[0].col = a[0].row /* columns in b = rows in a*/ b[0].value=n; if (n>0) { /*non zero matrix*/ currentb=1; for(I=0; I<a[0].col;I++) /*transpose by the columns in a*/ for(j=1;j<=n;j++) /*find elements from the current column*/ if(a[j].col = = i){ /*element is in current column, add it to b*/ b[currentb].row = a[j].col; b[currentb].col = a[j].row; b[currentb].value = a[j].value; currentb++; } }

上三角和下三角表示法 若一矩陣的對角線以下的元素均為零時,亦即aij=0,i>j,則稱此矩陣為上三角形矩陣(upper triangular matrix) 若一矩陣的對角線以上的元素均為零時,亦即aij=0,i<j,則稱此矩陣為上三角形矩陣(lower triangular matrix)

上三角和下三角表示法 (續) 一個n*n個的上下三角形矩陣共有[n(n+1)]/2個元素,依序對映至D(1: [n(n+1)]/2) 以列為主(上三角形矩陣):一個n*n的上三角形矩陣對映至D陣列時,當aij=D(k),則k = n(i-1)-[i(i-1)]/2+j 以列為主(下三角形矩陣):一個n*n的下三角形矩陣對映至D陣列時,當aij=D(k),則k = [i(i-1)]/2+j

上三角和下三角表示法 (續) 以行為主(上三角形矩陣):一個n*n的上三角形矩陣對映至D陣列時,當aij=D(k),則k = [j(j-1)]/2+I 以行為主(下三角形矩陣):一個n*n的下三角形矩陣對映至D陣列時,當aij=D(k),則k = n(j-1)-[j(j-1)]/2+ji