[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)),明天就来实际操作看看如何宣告阵列(ง •̀_•́)ง。


<<:  Day 17 ( 中级 ) 立体空间 ( 三度空间 )

>>:  Day 17 ( 中级 ) 灯光绕圈圈 ( 数字函式 )

<Day30>动手做 Demo App(下)

使用 room 来建立Database abstract class AppDatabase: Ro...

[DAY 06]物品拍卖价格查询功能(4/4)

今天终於能把查询物品拍卖价格网址这功能讲完了(汗) 物品拍卖价格网址目前热门的是universali...

[Day10] - Docker Compose 设定及操作介绍

在上一篇内容中我们透过 Docker Compose 同时开启了网站服务和资料库。透过简单的操作就可...

JavaScript 闭包(Closure) 下集

看这个程序码,结果会是如何? function ArrFunction(){ var arr=[];...

JavaScript学习日记 : Day14 - 原型与继承(一)

在写程序时,我们经常会想要拓展一些东西。 例如我们有一个user object,他有自己的属性跟函数...