什么是顺序表?

我们常说的数组就是一种顺序表
下面以C语言为例,介绍顺序表的基本特点和实现
在这里插入图片描述

数组:array{5,5,8,4,1,2,7,9}
           | | | | | | | |
索引:     {0,1,2,3,4,5,6,7}

这就是一个数组,我们可以根据索引去访问这个顺序表内的任何元素,索引大多数情况都是从0开始的


也就是说 array[2] = 8,正好是第三个元素

而在顺序表中,每个元素都是对应了一块内存空间,下面我们探讨在顺序表的使用

1.增加元素

如果我们想在顺序表内增加一个元素,比如增加在末尾,我们就需要扩容,然后把值放到表末位
变成这样

数组:array{5,5,8,4,1,2,7,9,?}
           | | | | | | | |
索引:     {0,1,2,3,4,5,6,7,8}

这只是一种理想情况,假如我们想插在中间呢?
那么我们需要扩容这个表,然后把插入位置往后的元素顺次移动,这样带来了很大的时间损失,所以顺序表在增加插入元素时是非常不方便的

而且,计算机中的内存并不一定是连续的,比如向后扩容没有空间,可能还需要移动整个数组。

2.删除元素

与增加同样的,如果我们删除了一个中间的元素,为了保证这种索引的机制,我们必须把一半的元素向前逐个移动,同样很复杂

3.修改元素

修改时,我们只需要根据索引修改这个位置的值即可

array[0] = 1;
4.查找元素

如果是已知索引查找,那非常的快,直接通过内存偏移拿到指定的元素。
如果未知索引,我们就需要进行一次遍历,对每个元素都比较一遍。

如果是有序的数组,我们可以使用二分法快速查找。

5.顺序表遍历
int arr[1000];
int main()
{
	for(int i=0;i<1000;i++)
	{
		int a = arr[i];
		printf("%d,",a);
	}
}

总结

顺序表在元素数量变化上有极大的缺陷,但是在修改,遍历,存储上具备较大优势。