什么是链表
- 相邻元素通过指针连接
- 最后一个元素的后继指针值为null
- 执行过程中,长度可以增加或缩小
- 空间能够按需分配
- 没有内存空间的浪费
整个数组所有的元素都存储在操作系统分配的一个内存中
使用索引作为数组的下标
访问数组元素=基地址+偏移量*距离
线性表的存储结构分为:顺序存储和非顺序存储(链表)
顺序存储:用一组连续的存储空间依次存储线性表的元素。
特点:逻辑顺序与物理顺序相同
顺序表是顺序存储,随机存取。
实现顺序存储的最有效方法是使用一维数组。
线性表上的基本操作
查找操作:
//返回元素x在数组中的位置
while (i <= last && data[i]!=x )
i++;
if(i>last) returen - 1; //查找失败
else return i;//查找成功
基本思想:先判断查找的元素x是否在指定查找的数组中,与数组中的每一个元素进行比较。
插入操作:需要把插入位置之后的元素依次往后移动,从最后一个开始。
//在k处插入元素x
if((k<0||k>last+1)||last==MaxSize-1)
return 0;
else{
last ++;
for (int j = last;j>k;j--)
data[j]=data[j-1];
data[k]=x;
return 1;
}
基本思想:判断插入的位置是否越界,修改数组长度,移动数组元素。
删除操作:把需要删除的元素后面的元素依次往前移动,从删除元素的后一个位置开始。
//删除k处的元素x
if (k<0||k>last)return0;
last--;
for(int j = k ; j<=last; j++)
data[j] = data [j+1];
return 1;
基本思想:先找到要删除k处的元素x,然后k+1的元素迁移进行覆盖,也就是删除k处的元素,后面的元素依次前移。
线性表的顺序存储结构简单,易于实现,可以随机访问表中任一元素,存储密度高。
插入删除麻烦,需要移动大约一半的元素。
插入一个元素平均移动n/2的元素。
删除一个元素平均移动(n-1)/2的元素。