静态链表的插入

一、静态链表的理解

        要理解静态链表是什么,就不得不说在没有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的下标

四、总结

        听完第一遍的是后,我感觉脑子嗡嗡的,听了三遍之后才听明白,在画图理解,写成一篇博客之后,我现在才感觉真正的理解了静态链表的插入到底是怎么回事了,心里很开心^_^

                            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值