21xrx.com
2025-03-21 14:43:41 Friday
文章检索 我的文章 写文章
C语言实现双向链表代码及相关方法
2023-06-14 10:33:35 深夜i     10     0
双向链表 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语言、代码实现

  
  

评论区