資料結構
一想到資料結構就感到很複雜的一些觀念 最早使用電腦的主因是要用來儲存及管理一些資料,這也是資料結構觀念的由來。當我們要求電腦解決問題時,必須以電腦了解的模式來描述問題,資料結構是資料的表示法,也就是電腦中儲存資料的方法。
認識資料結構
資料結構就是資料進入電腦化處理的一套完美邏輯。像程式設計師必須用資料結構來進行資料的新增、刪除、修改、儲存等動作,如果在選擇資料結構時做了錯的選擇,那你整個程式會變得沒效率或者變慢,甚至選錯資料型態那真的是會埋了更大的雷。
例如:圖書館會建立所有書的資料,管理人員會依照各個不同的書做種類分類,如年齡分級、書籍類型、作者或主題。分類好把檔案存起來日後有人要來借書時,只要查詢書籍類型作者名稱這樣,即可快速找出所需的書,而這些儲存的分類就是資料結構概念的一種。
資料與資訊
先了解一下資料(Data)與資訊(Information)的定義。
資料是指為基處理的文字、數字、符號、圖形等等。還可以再分為兩大類,
-
數值資料(Numeric Data):就是一般的數值,可用運算子來做運算
-
文數資料(Alphanumeric Data):像是非數值資料,像是我們看到的地址身分證號碼等等
資訊是將大量的資料,經過有系統的整理、分析、篩選處理,具有參考價值和可用性。
資料結構主要是表示資料在電腦記憶體中所儲存的位置和模式,可分為三種型態:
- 基本資料型態(Primitive Data Type)
無法以其他型態定義的資料型態,也稱為純量資料型態,程式語言都會提供基本資料,例如:Rust中的基本資料型態,包括整數、浮點數、布林、字符、陣列等等。
- 結構化資料型態(Structured Data Type)
也稱為虛擬資料型態,比基本資料型態更高一層,例如:結構、列舉等等。
- 抽象話資料型態(Abstract Data Type)
對一種資料型態,可將其看成是一種值的集合,以及在這些值上所作的運算與本身代表屬性成的集合。抽象資料型態所代表便是定義這種資料型態所具備的數學關係。
資料結構的種類
資料結構可透過程式語言提供有效的型別、參照及其他操作。我們知道一個程式能否快速而有效率的完成任務,取決是否選對了資料結構,而程式是否能清楚而正確的把問題解決,取決於演算法。
資料結構加上演算法等於有效率、可執行的程式。
不同種類的資料結構適合不同種類的應用,用適當的資料結構可讓演算法發揮最大效能。接下來會介紹常見的資料結構。
陣列(Array)
陣列結構是一排緊密的可數記憶體,並提供能夠直接存取單一資料計算方法。 像是每戶的信箱,每個信箱有地址,路名就是名稱,信箱號碼就是索引,可以依照信件上的住址投到信箱,陣列的名稱是表示一塊緊密相鄰記憶體的起始位置,而陣列的索引功能則是用來表示從此記憶體起始位置的第幾個區塊。
陣列的使用可分為一維陣列、二維陣列與多維陣列等等
二維陣列
二維陣列可視為一維陣列的延伸,都是處理相同型態資料,差別只在維度的宣告。
例如:一個含有x * y個元素的二維陣列,x代表列數,y代表行數
在Rust二維宣告格式:
這邊是用[]括住每一列的初始值,並以;區隔每個陣列元素
三維陣列
三維跟二維一樣,可視為是一維陣列的延伸,陣列為三維陣列時,可看作一個立方體,像是魔術方塊一樣。
上圖就像是arr[2][3][4]三維陣列成魔術方塊。
會印出
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
19 20 21
22 23 24
25 26 26