双链表的操作

该博客介绍了双链表的初始化、判断空、插入节点、删除节点、前后序遍历及链表销毁等基本操作。提供了详细的代码实现,便于理解与应用。
//初始化双链表
bool InitDlinkList(DLinklist &L) {
	L = (DNode*)malloc(sizeof(DNode));//分配一个头结点
	if (L == NULL)
		return false;
	L->prior = NULL;//头结点的priot永远指向NULL
	L->next = NULL;//头结点之后暂时还没有头结点
	return true;
}
//判断双链表是否为空(带头节点)
bool Empty(DLinklist L) {
	if (L->next = NULL)
		return true;
	else
		return false;
}
//在p节点之后插入s节点
bool InsertNextNode(DNode *p, DNode *s) {
	if (p == NULL || s == NULL) {//非法参数
		return false;
	}
	s->next = p->next;//将s节点插入到*p节点之后
	if (p->next != NULL)
		p->next->prior = s->next;//如果p节点后有后继节点
	s->prior = p;
	p->next = s;
}

//删除p节点的后继节点
bool DeleteNextNode(DNode *p) {
	if (p == NULL)
		return false;
	DNode *q = p->next;//找到p的后继节点
	if (q == NULL)//若p没有后继节点
		return false;
	p->next = q->next;
	if (q->next != NULL)//q节点不是最后一个节点
		q->next->prior = p;
	free(q);//释放节点空间
	return true;
}
//后序遍历
void Outputnext(DLinklist L) {
	DNode *p = L;
	while (p != NULL) {
		p->next;
		cout << p->data << endl;
	}
}
//前序遍历
void OutputPrior(DLinklist L) {
	DNode *p = L;
	while (p->prior != NULL) {
		p->prior;
		cout << p->data << endl;
	}
}
//链表的摧毁
void DestoryList(DLinklist &L) {
	//循环释放各个数据节点
	while (L->next != NULL)
		DeleteNextNode(L);
	free(L);//释放头结点
	L = NULL;//头指针指向NULL
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值