美文网首页
C语言实现双向链表

C语言实现双向链表

作者: 小角色被占用 | 来源:发表于2019-07-07 23:28 被阅读0次

关于双向链表的解释就不多说了,书本上介绍的挺详细的了,只需要记住每个节点有一个指向下一个节点的指针变量和指向前一个节点的指针变量即可。下面直接上代码。
DualLinkedList.h的代码如下所示:

ifndef DualLinkedList_h

define DualLinkedList_h

include <stdio.h>

endif /* DualLinkedList_h */

typedef struct DualLinkNode{
struct DualLinkNode *per;
struct DualLinkNode *next;
int data;
}DualLinkNode;
typedef DualLinkNode *DualLinkList;

void testDualLinkedList(void);

/**
初始化链表
*/
DualLinkList initDualLinkList(void);

/**
向双向列表中插入数据
*/
int insertData2DualLink(DualLinkList list,int data);

/**
向双向列表中指定位置插入数据
*/
int insertData2DualLinkWithIndex(DualLinkList list,int data,int index);

/**
遍历双向列表
*/
void forEachDualLinkList(DualLinkList list);

/**
清空双向链表
*/
void clearDualLinkList(DualLinkList list);

/**
销毁双向链表
*/
void destoryDualLinkList(DualLinkList *list);

DualLinkedList.c的代码如下所示:

include "DualLinkedList.h"

include "stdlib.h"

void testDualLinkedList(void){
DualLinkList list = initDualLinkList();
for(int i = 1;i<11;i++){
insertData2DualLink(list, i * 10);
}
// forEachDualLinkList(list);
insertData2DualLinkWithIndex(list, 2, 2);
forEachDualLinkList(list);
destoryDualLinkList(&list);
}

DualLinkList initDualLinkList(void){
DualLinkList list = (DualLinkList)malloc(sizeof(DualLinkNode));
if(!list){
printf("链表为空,不能继续运行!\n");
return NULL;
}
list->per = NULL;
list->next = NULL;
return list;
}

int insertData2DualLink(DualLinkList list,int data){
DualLinkList link = (DualLinkList)malloc(sizeof(DualLinkNode));
if(!link){
printf("链表为空,不能继续运行!\n");
return 0;
}
DualLinkList cur = list;
while (cur->next) {//从后边插入
cur = cur->next;
}
link->data = data;
link->next = NULL;
link->per = cur;
cur->next = link;
return 1;
}

int insertData2DualLinkWithIndex(DualLinkList list,int data,int index){
if(!list || data < 0){
return -1;
}
DualLinkList cur = list;
int i = 0;
if(cur->next && i < index - 1){
i++;
cur = cur->next;
}
if(!cur || i > index){
printf("超出链表的最大长度\n");
return -2;
}
DualLinkList link = (DualLinkList)malloc(sizeof(DualLinkNode));
link->data = data;
link->per = cur;
link->next = cur->next;
cur->next->per = link;
cur->next = link;
return 0;
}

void forEachDualLinkList(DualLinkList list){
if(!list){
return;
}
DualLinkList cur = list;
DualLinkList per = list->per;
while (cur->next) {
cur = cur->next;
per = cur->per;
printf("per:%d---next----%d\n",per->data,cur->data);
}
}

void clearDualLinkList(DualLinkList list){
if(!list){
return;
};
DualLinkList p,q;
p = list->next;
while (p) {
q = p->next;
free(p);
p = q;
}
list->next = NULL;
printf("清空结束\n");
}

void destoryDualLinkList(DualLinkList list){
if(!list){
return;
}
clearDualLinkList(
list);
free(*list);
*list = NULL;
}

相关文章

  • C++实现双向循环链表

    本次博文是关于利用C++模板的方式实现的双向循环链表以及双向循环链表的基本操作,在之前的博文C++语言实现双向链表...

  • C++语言实现双向链表

    这篇文章是关于利用C++模板的方式实现的双向链表以及双向链表的基本操作,在之前的博文C语言实现双向链表中,已经给大...

  • Redis 源码--链表。

    因为C语言是一个比较底层的语言,库内没有实现链表,于是Redis自己实现了链表。Redis的链表是一个双向链表。 ...

  • C语言实现双向循环链表

    在之前的文章中,我写过一篇关于C语言实现双向链表博文,介绍了双向链表的实现过程以及双向链表的优势,接下来我首先给大...

  • C语言实现双向链表

    C语言的标准库并没有实现链表,所以需要我们通过所学的知识来实现链表。先来看看双向链表的定义,来源于百度百科。 双向...

  • C语言实现双向链表

    关于双向链表的解释就不多说了,书本上介绍的挺详细的了,只需要记住每个节点有一个指向下一个节点的指针变量和指向前一个...

  • C语言实现双向链表

    目前我们所学到的链表,无论是动态链表还是静态链表,表中各节点中都只包含一个指针(游标),且都统一指向直接后继节点,...

  • 双向链表(C语言)

    1、头文件doublelist.h 2、相关操作函数文件doublelist.c 3、主函数main.c

  • 容器(2) - LinkedList

    LinkedList 基本实现 LinkedList 类似 C/C++ 的双向链表,这种链表中任意一个存储单元都可...

  • 双向链表python实现

    python 双向链表实现 双向链表实现 链表头部添加 链表尾部添加 插入 删除 查询结点

网友评论

      本文标题:C语言实现双向链表

      本文链接:https://www.haomeiwen.com/subject/amdwhctx.html