21xrx.com
2024-12-22 23:58:50 Sunday
登录
文章检索 我的文章 写文章
C语言实现双向链表代码及相关方法
2023-06-14 10:33:35 深夜i     --     --
双向链表 C语言 代码实现

双向链表是一种常见的数据结构,它在C语言中的应用非常广泛。本文将介绍C语言实现双向链表的代码及相关方法。

一、什么是双向链表

双向链表是一种链式存储结构。它的每个节点都包含两个指针:一个指向前一个节点,一个指向后一个节点。这样,每个节点可以快速找到它前后的节点。

二、双向链表的代码实现

以下是C语言实现双向链表的基本代码:


typedef struct Node {

  int data;       // 数据域

  struct Node* prev;  // 指向前一个节点

  struct Node* next;  // 指向后一个节点

} Node;

typedef struct DoubleLinkedList {

  Node* head;     // 指向链表头

  Node* tail;     // 指向链表尾

} DoubleLinkedList;

// 创建一个双向链表

DoubleLinkedList* createList() {

  DoubleLinkedList* list = (DoubleLinkedList*)malloc(sizeof(DoubleLinkedList));

  list->head = NULL;

  list->tail = NULL;

  return list;

}

// 在链表尾添加一个节点

void addNode(DoubleLinkedList* list, int data) {

  Node* node = (Node*)malloc(sizeof(Node));

  node->data = data;

  node->prev = list->tail;

  node->next = NULL;

  if (list->tail != NULL)

    list->tail->next = node;

  

  list->tail = node;

  if (list->head == NULL)

    list->head = node;

  

}

// 在链表头添加一个节点

void addNodeAtHead(DoubleLinkedList* list, int data) {

  Node* node = (Node*)malloc(sizeof(Node));

  node->data = data;

  node->prev = NULL;

  node->next = list->head;

  if (list->head != NULL)

    list->head->prev = node;

  

  list->head = node;

  if (list->tail == NULL)

    list->tail = node;

  

}

// 删除指定节点

void deleteNode(DoubleLinkedList* list, Node* node) {

  if (node == list->head && node == list->tail)

    list->head = NULL;

    list->tail = NULL;

  

  else if (node == list->head)

    list->head = node->next;

    list->head->prev = NULL;

  

  else if (node == list->tail)

    list->tail = node->prev;

    list->tail->next = NULL;

  

  else

    node->prev->next = node->next;

    node->next->prev = node->prev;

  

  free(node);

}

// 遍历双向链表

void traverseList(DoubleLinkedList* list) {

  Node* current = list->head;

  while (current != NULL) {

    printf("%d ", current->data);

    current = current->next;

  }

}

三、双向链表的操作方法

1.创建双向链表

使用createList()函数可以创建一个空的双向链表。

2.在链表尾添加一个节点

使用addNode()函数可以在链表尾添加一个节点。

3.在链表头添加一个节点

使用addNodeAtHead()函数可以在链表头添加一个节点。

4.删除指定节点

使用deleteNode()函数可以删除指定节点。

5.遍历双向链表

使用traverseList()函数可以遍历双向链表。

四、关键词

双向链表、C语言、代码实现

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复