350 likes | 601 Views
資料結構使用 Java. 第 4 章 Java 程式複習、 ADT 與串列. 課程內容. 複習 -Java 程式設計 類別物件 建構元 資料結構 抽象資料型態 ADT 串列 – 陣列的應用實例. 類別與物件. 類別的內容 定義類別 建立新物件 存取物件內容. 資料成員、成員函數與封裝. 「類別」就是把事物的資料與相關功能「 封裝 」( encapsulate )在一起 「 encapsulate 」的原意是「將 ... 裝入膠囊內」 類別可看成是「膠囊」 資料成員 與 成員函數 可看成是被裝入的東西.
E N D
資料結構使用Java 第4章 Java程式複習、ADT與串列
課程內容 • 複習-Java程式設計 • 類別物件 • 建構元 • 資料結構 • 抽象資料型態ADT • 串列 – 陣列的應用實例
類別與物件 類別的內容 定義類別 建立新物件 存取物件內容
資料成員、成員函數與封裝 • 「類別」就是把事物的資料與相關功能「封裝」(encapsulate)在一起 • 「encapsulate」的原意是「將...裝入膠囊內」 • 類別可看成是「膠囊」 • 資料成員與成員函數可看成是被裝入的東西 類別是由「資料成員」與「成員函數」封裝而成
矩型類別的認識 • 矩型類別: • 資料成員為 width 與 height • 成員函數為 area()與 perimeter()
類別的定義 • 類別定義的語法如下: 類別的定義格式 class類別名稱 { 資料型態 field名稱; ... 傳回值的資料型態 method名稱(引數1,引數2,...) { 程式敘述 ; return運算式; } ... } 宣告field method的本體(body) 定義method的內容
矩形類別的範例 • 以矩形為例,可定義如下的矩形類別: 本書大寫C為開頭的識別字做為類別的名稱,方便和其它變數做區隔
建立新物件 • 類別只是一個模版: • 利用它才能建立屬於該類別的物件(object) • 以矩形類別來說,從定義類別到建立物件,可想像成: • 先打造一個矩形模版(定義類別) • 再以此模版製造矩形(建立物件) • 由類別所建立的物件稱為該類別的 instance(實例)
矩形類別的物件 • 下圖是由矩形類別所建立的矩形物件rect1:
宣告與建立物件 • 欲建立某類別的物件,可藉由下面兩個步驟來達成: (1) 以類別名稱宣告變數 (2) 利用new建立新的物件,並指派給先前所建立的變數 • 例如: 或是縮減成一行:
存取物件的內容 • 存取物件裡的特定資料成員,可透過下面語法來達成: 存取物件裡特定的資料成員 物件名稱.資料成員名稱 • 舉例來說,存取物件rect1的寬與高,可用下列方式:
設定物件的寬與高 • 想要將物件寬與高設值,其程式碼的撰寫如下:
this的使用 • 要強調「物件本身的field」時,可在field前面加上this: this.資料成員名稱 • 下面的程式碼片段是冠上this的寫法:
建構元的基本認識 • 建構元(constructor)是幫助新建立的物件設定初值 • 建構元的名稱必須與其所屬之類別的類別名稱相同 • 建構元可視為一種特殊的method,其語法如下: 建構元的定義格式 修飾子 類別名稱(型態1 引數1, 型態2 引數2,...) { 程式敘述 ; .... } 可以是public或private 建構元的名稱必須和類別名稱相同 建構元沒有傳回值
建構元的呼叫時機 • 一般的method • 在需要用到時才呼叫 • 建構元 • 在建立物件時,便會自動呼叫,並執行建構元的內容 • 建構元可對物件的資料成員做初始化的設定 • 初始化(initialization)就是設定物件的初值
建構元的省略 • 如果省略建構元 • Java會呼叫預設的建構元(default constructor) • 預設的建構元是沒有任何引數的建構元,格式如下: • 如果自行撰寫建構元,無論是否有引數,則Java會假設已備妥所有的建構元,不會再提供預設的建構元 預設建構元的格式 public CCircle() { }
資料結構 抽象資料型態ADT 串列 – 陣列的應用實例
抽象資料型態 - ADT的涵義 • 抽象資料型態 (ADT,abstract data types) 在設計上希望做到隱藏內部細節、展現平易外觀的目的,也就是讓使用者能善用資料結構,卻不必了解其內部的運作細節。 • 理論上,我們常把ADT定義為將資料規格 (specification) 與實作 (implementation) 分開的資料型態。
陣列的基本操作 • 陣列的作用是提供循序的空間供我們使用 • 只需用一個唯一的索引值,便能任意指定要放入或取出哪一個位置內的資料 • 因此陣列的基本操作也就非常簡單,只有『產生』、『寫入』、與『讀取』三個動作。 • 有很多實際應用的概念或事物都適合用陣列來表示,最常見的是串列、矩陣 (matrix) 與多項式 (polynomial)。
串列的資料結構設計 • 串列的大小會隨著串列的使用而不斷地改變,但陣列的大小在宣告以後就固定了。
串列的操作與處理方法 • 串列的操作包括 : • 新增元素到串列尾端 (append) • 讀取元素 (read) • 寫入 (write) • 將元素插入到串列中 (insert) • 刪除元素 (delete) • 傳回串列的元素數目 (listSize) • 以及傳回儲存串列的陣列大小 (arraySize)。
串列的程式實作 • [串列的ADT] list.java
串列的程式實作 • [串列的主程式] testList.java
[串列的產生] • [串列的實作程式] myList.java • 下面用一維陣列來儲存串列 • 另外使用一個程式變數listSize來記載串列的長度,也就是串列元素的數目。 intmyArray[ ]; intlistSize=0; • 透過建構元進行初始化動作
[新增元素到串列尾端 (append)] • 把元素新增到串列尾端並不影響其他的串列元素 • 可以用listSize來決定新增的元素的位置 • 完成操作以後listSize的值要加上1,因為串列多了一個元素。 myArray[listSize] = element
[插入一個串列元素 (insert)] • 有時候可能需要將新元素插入到串列的特定位置,這時就要有個更複雜的插入動作。
[刪除一個串列元素 (delete)] • 刪除一個串列元素,後面的串列元素要往前補 • 以下的例子把myArray[1]裡頭儲存的數字從串列中移除,所以後面的數字必須往前補到空出來的陣列位置上。
[讀取(read)] • 要從串列讀取資料,必須指定元素的位置。 • 由於串列元素是按先後順序不間斷地儲存在陣列中,所以串列元素在串列中的次序剛好就是該元素儲存在陣列上對應的索引。
[寫入(write)] • 提供一個值,並指定接收這個值的串列位置 • 寫入同樣可以透過函式的呼叫來執行,或者直接在程式中將一個變數或常數的值直接透過索引存入到串列的正確位置。
[列出所有串列元素(printList)] • 將串列中的元素一一地列印出來,用來列印出目前串列中的元素。串列元素的數目由listSize來決定。 for (int i=0; i<listSize; i++) System.out.print(this.myArray[i]+" ");