数据结构论坛

首页 » 分类 » 常识 » 带你认识数据结构双链表
TUhjnbcbe - 2025/2/17 18:46:00

#结构#在文章中,作者介绍了如何建立一个单链表。

在本篇文章中,作者将介绍双链表是什么,以及它的一些相关操作。

双链表又叫双向链表,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。也就是说,双链表其实就是在单链表的基础上添加了一个头指针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;

}

本篇文章到此就结束了,欢迎大家

1
查看完整版本: 带你认识数据结构双链表