什么是顺序表?
我们常说的数组就是一种顺序表
下面以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);
}
}
总结
顺序表在元素数量变化上有极大的缺陷,但是在修改,遍历,存储上具备较大优势。