数组
数组也是数据呈线性排列的一种数据结构
Blue、Yellow、Red作为数据存储在数组中。
结构
数据按顺序存储在内存的连续空间内
随机访问
由于数据是存储在连续空间内的,所以每个数据的内存地址(在内存上的位置)都可以通过数组下标算出,我们也就可以借此直接访问目标数据(这叫作“随机访问”)。
添加
将Green添加到第2个位置上。
首先,在数组的末尾确保需要增加的存储空间
为了给新数据腾出位置,要把已有数据一个个移开。首先把Red往后移。
然后把Yellow往后移。
最后在空出来的位置上写入Green。
删除
删掉目标数据(在这里指Green)。
然后把后面的数据一个个往空位移。先把Yellow往前移。
接下来移动Red。
最后再删掉多余的空间。这样一来Green便被删掉了。
特点
假设数组中有n个数据,由于访问数据时使用的是随机访问(通过下标可计算出内存地址),所以需要的运行时间仅为恒定的O(1)。
但另一方面,想要向数组中添加新数据时,必须把目标位置后面的数据一个个移开。所以,如果在数组头部添加数据,就需要O(n)的时间。删除操作同理。
栈
栈也是一种数据呈线性排列的数据结构,不过在这种结构中,我们只能访问最新添加的数据。
栈这种最后添加的数据最先被取出,即“后进先出”的结构,我们称为Last In First Out,简称LIFO。
入栈
栈中添加了数据Green
数据Red入栈
出栈
从栈中取出数据时,是从最上面,也就是最新的数据开始取出的。这里取出的是Red。
取出Green
特点
与链表和数组一样,栈的数据也是线性排列,但在栈中,添加和删除数据的操作只能在一端进行,访问数据也只能访问到顶端的数据。想要访问中间的数据时,就必须通过出栈操作将目标数据移到栈顶才行。
队列
队列中添加和删除数据的操作分别是在两端进行的
像队列这种最先进去的数据最先被取来,即“先进先出”的结构,我们称为First In First Out,简称FIFO。
现在队列中只有数据Blue
入队
队列中添加了数据Green
数据Red也入队
出队
从队列中取出(删除)数据时,是从最下面,也就是最早入队的数据开始的。
取出Green
特点
与栈类似,队列中可以操作数据的位置也有一定的限制。在栈中,数据的添加和删除都在同一端进行,而在队列中则分别是在两端进行的。队列也不能直接访问位于中间的数据,必须通过出队操作将目标数据变成首位后才能访问。
其他数据结构见下篇文章。