#结构#在文章中,作者介绍了如何建立一个单链表。
在本篇文章中,作者将介绍双链表是什么,以及它的一些相关操作。
双链表又叫双向链表,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。也就是说,双链表其实就是在单链表的基础上添加了一个头指针prior。
那么为什么要这么做呢?由于添加了一个头指针prior,我们就可以很方便地访问它的前驱结点和后继结点,当我们希望找到一个结点的头结点时,无需再遍历整个链表,而是直接通过头指针访问其前驱结点即可。
接下来我们就来看看如何使用c++代码实现双链表的相关操作。
1,双链表的初始化:
typedefstructDNode{
intdata;
structDNode*prior,*next;
}DNode,*DLinklist;//与单链表一样,创建一个结构体,其中定义了prior指针和next指针,分别指向前后结点
boolInitDList(DLinklistL){
L=(DNode*)malloc(sizeof(DNode));
if(L==NULL){
returnfalse;
//TODO
}
L-prior=NULL;
L-next=NULL;
returntrue;
}//初始化双链表,将prior与next指针都指向空
2,双链表的插入:
boolInsterNextDNode(DLinklistp,DLinklists){
if(p==NULL
s==NULL){
returnfalse;
//TODO
}//判断参数是否合法
s-next=p-next;
if(p-next!=NULL){
p-next-prior=s;
//TODO
}//判断下一个结点是否为最后一个结点,如果不是则将下一个结点的prior指针指向s;
s-prior=p;
p-next=s;
returntrue;
}//实现被插入元素的链接
3,双链表的删除操作:
boolDeleteNextDNode(DLinklistp){
if(p==NULL){
returnfalse;
//TODO
}
DNode*q=p-next;//q指向要删除的结点
p-next=q-next//将p的next指针指向q的后继
if(q-next!=NULL){
q-next-prior=p;
//TODO
}//如果q的后继不为空,则把q的后继的prior指针指向p
free(q);//释放q指针
returntrue;
}
本篇文章到此就结束了,欢迎大家