iT邦幫忙

2021 iThome 鐵人賽

DAY 3
1
Software Development

程式菜鳥自學C++資料結構演算法系列 第 3

[Day03]程式菜鳥自學C++資料結構演算法 – 常見的線性串列其一:陣列Array List

前言:先來談談線串列表示甚麼,線性串列就是一種a[0],a[1],a[2]…,a[n]所組成的有限序列,[ ]內的數字則代表元素的位置(可稱為下標),而線性串列就可以根據元素的位置進行新增、刪除、修改、查詢等動作。
線性串列在電腦中的應用有分為動態及靜態的資料結構,之後會再加以說明。

動態資料結構是一種將線性串列的資料使用不連續記憶空間來儲存。優點是資料的插入或刪除都相當方便,不需要移動大量資料。另外動態資料結構的記憶體配置是在執行時才發生,所以不需事先宣告,能夠充份節省記憶體。缺點就是設計資料結構時較為麻煩,另外在搜尋資料時,也無法像靜態資料一般可隨機讀取資料,必須循序找到該資料為止。

而最常見的線性串列有分為順序結構的陣列Array(靜態)和鏈結結構的鏈結串列Link List(動態)。

今天就先將重點擺在陣列Array吧!
陣列是甚麼,剛接觸資料結構的同學一開始都會有一點排斥(對!就是我…),
其實最常出現在我們生活中的「排隊」就有陣列的雛型喔!

陣列(靜態資料結構)的特性:

  1. 必須使用一段連續的記憶體空間儲存
  2. 要一群相同類型的資料才能儲存
  3. 可以透過索引值對資料進行查詢、更改
  4. 必須要明確規劃記憶體空間供資料儲存
  5. 缺點則是刪除或加入資料時,需要移動大量的資料
    是不是有點難懂? 舉個例子:
    https://ithelp.ithome.com.tw/upload/images/20210917/20140187ml5awfKGNa.jpg
    圖片來源:https://img.freepik.com/free-vector/flat-hotel-facade-background_23-2148157465.jpg?size=338&ext=jpg
  • 一棟旅館房間與房間都是相鄰的(連續的記憶體)
  • 每個房間都有住人(相同類型的資料)
  • 每個房間都有對應的**房號(索引值)**查詢或更改客人
  • 再蓋好旅館前就必須先規劃好房間數量(規劃記憶體空間)
  • 如果之後要增加或減少房間都會非常麻煩
    這樣是不是有比較了解陣列的特性了呢?

多維陣列(Multidimensional Arrays):

陣列也能依照使用者給予的維度而有不一樣的樣貌。

一維陣列:平常排隊買東西就是一維陣列的最佳寫照,顧名思義就是一條線,不管長短、斜的、彎的都不會改變它是一條線的事實。
https://ithelp.ithome.com.tw/upload/images/20210917/20140187TkMPLTCVLN.jpg
圖片來源:https://image.shutterstock.com/image-vector/illustration-stickman-kids-arms-standing-260nw-1050197495.jpg

舉例:實際宣告陣列的話可以用在紀錄一天吃甚麼?

二維陣列:二維就開始有了平面的概念,平常上課的座位表或是上課的課表就可以當成一種二維陣列喔!
實際宣告陣列的話可以用在紀錄一星期(多天數)吃甚麼

三維陣列;而三維就是大家熟知的立體,剛剛上面以旅館作為的例子就是三維的概念。
實際宣告陣列的話可以用在一家人(多個人)紀錄一星期吃甚麼

N維陣列:四維以上就可以稱作N維了,因為不是大家在生活中會碰到的,所以一定會相對陌生(小弟書讀得少,剛爬了一下維基,還是不太明白四維的概念ヾ( ̄□ ̄;)ノ)。
實際宣告陣列的話可以把三文陣列的應用再多疊加個月分甚至年分,就能達到多維陣列的效果喔!

小結:今天算是簡單介紹完甚麼是陣列跟衍生的類型,多維陣列比較複雜,再建立時一定要先想清楚!(我也常常弄錯就是了(iДi)),明天就來實際操作看看如何宣告陣列(ง •̀_•́)ง。


上一篇
[Day02] 程式菜鳥自學C++資料結構 – 簡單QA
下一篇
[Day04]程式菜鳥自學C++資料結構演算法 – 陣列Array List實作之一
系列文
程式菜鳥自學C++資料結構演算法30

尚未有邦友留言

立即登入留言