基于C语言的双链表

初始化

将头节点的prior、next都指向NULL

PList InitList()
{
	PList L = (PList)malloc(sizeof(LNode));
	if (L == NULL) 
		return false;
	L->next = NULL;
	L->prior = NULL;
}

插入

前插法

LNode Insert()
{
	LNode* p, * q;
	if (p == NULL || q == NULL)//确保p,q均不为空
		return false;
	q->next = p->next;
	if(p->next)//确保p所指的地址不为空,才能插入
		p->next->prior = q;
	p->next = q;
	q->prior = p;
}

删除

注:q为p的下一个元素,这里要求删除p之后的q

LNode Delete()
{
	LNode* p, *q;
	//删除p后的q
	if (p == NULL)
		return false;
	q = p->next;
	if (q == NULL)
		return false;
	p->next = q->next;
	if(q->next)
		q->next->prior = p;
	free(q);
	return true;
}

遍历

由于链表无法实现随机存取,只能顺序读取

PList Visit1(PList L)//后项遍历
{
	while (L)
	{
		L = L->next;
	}
}
PList Visit2(PList L)//前项遍历
{
	while (L)
	{
		L = L->prior;
	}
}
PList Visit3(PList L)//前项遍历且跳过头节点
{
	while (L->prior)
	{
		L = L->prior;
	}
}

销毁

PList Destroy(PList L)
{
	while (L->next)
		Delete(L);
	free(L);
	L = NULL;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值