算法初接触 | 数据结构[数组、栈]

77 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天

数组

数组也是数据呈线性排列的一种数据结构。在数组中,访问数据十分简单,而添加和删除数据比较耗工夫

01

6733a96571387ff3fbab3ef5d1489ba.jpg
a是数组的名字,后面“1”中的数字表示该数据是数组中的第几个数据(这个数字叫作“数组下标",下标从0开始计数)。比如,Red就是数组a的第2个数据。

02

b4bd695fa0d945185f1b684254834d4.jpg
数据按顺序储存在内存的连续空间内

03

由于数据是存储在连续空间内的,所以每个数据的内存地址(在内存上的位置)都可以通过数组下标算出,我们也就可以借此直接访问目标数据(这叫作“随机访问”)。

04

比如现在我们想要访问Red。如果使用指针就只能从头开始查找,但在数组中,只需要指定a[2],便能直接访问Red。

05

但是,如果想在任意位置上添加或者删除数据,数组的操作就要比链表复杂多了。添加数据的过程见下图,删除数据的原理与添加相同。
80a6a2002b055ad2fddd47018f5a931.jpg

补充:

704994cc451089363e7eff3972d5d17.jpg

栈也是一种数据呈线性排列的数据结构,不过在这种结构中,我们只能访问最新添加的数据。栈就像是一摞书,拿到新书时我们会把它放在书堆的最上面,取书时也只能从最上面的新书开始取

36857a84f4ef94529fe0963f01198c1.jpg

解说

像栈这种最后添加的数据最先被取出,即“后进先出”的结构,我们称为Last In First Out,简称LIFO。
与链表和数组一样,栈的数据也是线性排列,但在栈中,添加和删除数据的操作只能在一端进行,访问数据也只能访问到顶端的数据。想要访问中间的数据时,就必须通过出栈操作将目标数据移到栈顶才行。