一、静态链表的理解
要理解静态链表是什么,就不得不说在没有C语言指针的时候,别的高级语言如何申请链表的,它其实是一个伪链表,是在一个数组的基础上来实现了链表的逻辑结构,但物理结构依然是数组,需要申请一块内存空间用来存放数据。
二、静态链表的插入
1、静态链表插入的代码
1.1、获取备用元素的首位置
int Malloc_SLL(StaticLinkList space)
{
int i = space[0].cur;
if (space[0].cur)
{
space[0].cur = space[i].cur;
//把它的下一个分量用来作为备用
}
return i;
}
1.2、实现静态链表元素的插入
/*在静态链表L中第i个元素之前插入新的数据元素e*/
Status ListInsert(StaticLinkList L, int i, ElemType e)
{
int j, k, l;
k = MAXSIZE - 1; //数组的最后一个元素
if (i < 1 || i > ListLength(L) + 1)
{
return ERROR;
}
j = Malloc_SLL(L);
if (j)
{
L[j].data = e;
//这个循环是用来找到第i个元素的
for (l = 1; l <= i - 1; l++)
{
k = L[k].cur;
}
L[j].cur = L[k].cur;
L[k].cur = j;
return OK;
}
return ERROR;
}
2、理解代码
2.1、找到备用链表的下标
将下标为0的元素的游标返回给i,然后自己指向i的游标,以备下次插入使用
2.2、赋值
将找到了的空闲元素的位置的data赋上相应的值
2.3、寻找游标
从最后一个元素的游标开始查找,然后不停的寻找下一个游标,知道找到你要插 入的位置。
2.4、游标互换
将找到的元素的游标改为插入元素的下标,然后将插入位置的游标改为下一个元素位置的下标。
三、举例(彻底吃透):我们在该静态链表中插入一个要插入一个2b
1、找到备用元素的游标,并将申请后的元素的下标返回给下标为0的元素的游标
2、将B赋给下一个元素的data
3、将1a的游标指向2b的下标,将2b的游标指向3c的下标
四、总结
听完第一遍的是后,我感觉脑子嗡嗡的,听了三遍之后才听明白,在画图理解,写成一篇博客之后,我现在才感觉真正的理解了静态链表的插入到底是怎么回事了,心里很开心^_^