Java 程式設計(二) :第 四章 陣列資料結構 下一頁 |
第四章 陣列資料結構
4-1 資料結構 既然電腦是處理資料的能手,勢必也有儲存大量資料的能力,到底資料怎麼儲存才好?這牽涉到的問題很廣。從最基本的觀點來看,電腦除了能儲存大量資料外,還必須具有處理這些資料的能力,譬如,從中搜尋所要的資料,或可以容易的插入、刪除或更新資料內容。如果資料不多時,隨便儲存都不會產生大礙,然而當資料超過千萬筆時,如何可快速處理這些資料,這可就非常困難。然而為了讓資料可以被快處理,這就牽涉儲存方式,一般稱之為『資料結構』。 資料結構有許多種方法,譬如:陣列、鏈路、樹狀、B-Tree、B+-Tree 等等方法。B-Tree 以上的資料結構處理方法並不容易,但他們的搜尋速度最快,較適合巨量儲存環境;陣列結構的處理方法最簡單,但搜尋速度最慢,較適合小資料量的儲存。相對應的利用 B-Tree 資料結構所建立的資料庫系統,遠比利用陣列建立的貴很多。本書僅利用陣列要介紹資料結構的程式編寫技巧,至於較複雜的儲存方式,留給專門課程介紹。 4-2 無序陣列結構 4-2-1 無序陣列結構簡介 陣列資料結構的基本構想是利用二維陣列,陣列中每一行為一筆資料。基本上每一筆資料都有一個關鍵欄位,此關鍵欄位在所有其他資料中不可重複,又稱為『主鍵』。如果資料儲存於陣列中沒有依照主鍵的大小排列,則稱為『無序陣列結構』,反之,有依照主鍵的大小排列,則稱為『有序陣列結構』。圖 4-1 為兩者的比較,同樣都是儲存文具庫存資料,並以序號為主鍵,無序陣列沒有照次序儲存;有序陣列則有依照序號大小排列。為了簡化程式設計,以下的範例僅利用主鍵來說明。
圖 4-1 無序陣列結構
圖 4-1-1 有序陣列結構 4-2-2 範例研討:建立無序陣列 (A)系統功能:Ex4_1.java 吾人希望建立一個無序陣列,儲存空間為 50 筆,並具有插入與列印資料的功能,期望操作介面如下: (1)具有 3 個選單如下:
(2)選擇列印資料(選擇 1) 如下:
(3)插入元素後其結果 (選擇 2 與 1) 如下:
(B)系統分析: 圖 4-2 是我們需建立一個空間為 50 的陣列,空間為:num[0] ~ num[49],其中利用一個 point 指標來顯示目前資料到甚麼地方,當陣列空間還未儲存資料則 point = -1,插入一筆資料後 point = point + 1,為 0 ,依此類推。如果刪除資料則 point = point -1,如果 point=-1 則表示陣列空閒;point=49 則表示陣列已滿不可再存入。
圖 4-2 無序陣列的插入元素(插入 5) (C)程式範例 圖 4-3 為 Ex4_1.java 的程式架構,包含有 3 個『方法程式』(method) 與 2個類別變數,其中 main 為主程式、disp_menu 是顯示功能選項程式、disp_array 為列印陣列內容程式。類別變數 num[] 是無序陣列的儲存空間;point 是指示目前陣列存放位置的游標,兩者類別變數允許所有方法程式存取。 其中『類別變數』(class variable)又稱為『整體變數』,它允許類別內所有『方法程式』存取。亦是,num[] 與 point 兩變數允許 main()、disp_menu() 與 disp_array() 等方法共同存取使用。如果這兩個變數在 main() 方法內宣告的話,則僅被 main() 存取,其他兩個方法就無法使用到他們。
圖 4-3 Ex4_1 程式架構
(D)編譯與執行如下: (E)重點說明 (1) 第7~8 行:宣告產生類別變數 num[] 與 point。 (2) 第16~20行:給予 num[] 某些初值。 4-2-3自我挑戰:無序陣列中元素處理 (A)系統功能:PM4_1.java 吾人希望在 Ex4_1 的無序陣列中,可選擇刪除某一個元素的功能,期望操作介面如下: 望操作介面如下: (1)具有 4 個選單如下:
(2)選擇列印資料(選擇 1) 如下:
(3)刪除元素後其結果 (選擇 3 與 1) 如下:
(B)系統分析 圖 4-4 是由無序陣列中刪除某一元素的示意圖。它有以下步驟: (1) 搜尋欲刪除的元素是否在陣列中,如沒有則結束。 (2) 如找到了,記錄其儲存位置(譬如 num[k]),則由 num[k+1] 以後到游標(num[point]) 的資料都往前移一位,將 num[k] 內容覆蓋。
圖 4-4 無序陣列刪除元素(刪除 2)的運作 (C)程式提示 圖 4-5 為程式架構圖,由 Ex4_1.java 中增加了 Linear_search(),它的功能是搜尋所欲刪除元素的位置,如果找到的話,則回傳 location 位置,否則回傳 location=-1。
圖 4-5 PM4_1 程式架構 (D)編譯與執行如下: |
翻轉工作室:粘添壽
Java 程式設計(二) 含物件導向
翻轉電子書系列:
|