大话数据结构:线性表链式存储(3)

上一篇文章写到单链表的整表创建,这篇文章接着从单链表的整表删除写起

单链表的整表删除

不打算使用这个单链表时,需要销毁它,在内存中将它释放掉,以便于留出空间给其他程序或软件使用。

单链表整表删除的算法思路:

1.声明一结点p和q;
2.将第一个结点赋值给p;
3.循环
1)将下一结点赋值给q
2)释放p
3)将q赋值给p

实现代码的算法:

/*初始条件:顺序线性表L已存在,操作结果:将L重置为空表*/
Status ClearList (LinkList *L)
{
	LinkList p,q;
	p=(*L)->next;/*p指向第一个结点*/
	while(p)/*没到表尾*/
	{
		q=p->next;
		free(p);
		p=q;
		/*q存在的意义,使p释放后,知道下一个应该释放哪个,而不会乱*/
	}
	(*L)->next=NULL;/*头结点指针域为空*/
	return OK;
}

静态链表

数组描述的链表:静态链表
算法代码实现:

/*线性表的静态链表存储结构*/
#define MAXSIZE 1000 /*假设链表的最大长度是1000*/
typedef stuct
{
		ElemType data;
		int cur;/*游标(Cur数据结构:线性表链式存储(3)sor),为0时表示无指向*/
}Component,StaticLinkList[MAXSIZE];

静态链表:数组里既存了数据,又存了指向性量cur(游标)。

静态链表的插入操作

将所有未被使用过的及已被删除的分量用游标链成一个备用的链表,每次插入时,便可以从备用链表上取得第一个结点作为待插入的新结点。

/*若备用空间链表非空,则返回分配的结点下标,否则返回0*/
int Malloc_SLL(StaticLinkList space)
{
	int i=space[0].cur;//第一个游标存的值,就是要返回的第一个备用空闲链表的下标
	
	if (space[0].cur)
		space[0].cur=space[[i].cur;//由于要拿出一个分量来使用了,所以我们就得把它的下一个分量来拿做备用
	return i;
}

如何实现插入:待插入元素先在备用链表中找一个位置,然后改变它插入位置前元素的游标指向,然后待插入元素的游标指向它前一个元素的原游标指向。

循环链表:

单链表终端结点的指针端由空指针改为指向头结点,使整个单链表形成一个环。
链表合成也可以用这招,尾结点指向另一链表头结点。
循环链表:从任意一个位置开始遍历整个链表

双向链表

一个数据域+两个指针域

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值