📌  相关文章
📜  数据结构示例-创建n个节点的双向链表并计算节点数(1)

📅  最后修改于: 2023-12-03 15:26:09.772000             🧑  作者: Mango

数据结构示例-创建n个节点的双向链表并计算节点数

什么是双向链表?

双向链表是一种常见的线性数据结构,它由多个节点组成,每个节点包含两个指针,一个指向前一个节点,一个指向后一个节点。双向链表可以用于实现栈、队列、哈希表等数据结构。

如何创建一个双向链表?

创建一个双向链表需要先定义节点的结构,一个节点的结构应该包括两个指针(指向前一个节点和后一个节点)和一个数据域,数据域用于存储节点的数据。

struct Node {
  int data;
  struct Node* prev; // 指向前一个节点
  struct Node* next; // 指向后一个节点
};

接着,我们可以写一个函数来创建n个节点的双向链表。该函数将返回链表的头指针。

struct Node* createLinkedList(int n) {

  // 定义头节点和尾节点
  struct Node *head, *tail, *new_node;
  head = NULL;
  tail = NULL;

  // 循环创建n个节点
  for (int i = 0; i < n; i++) {
    // 动态申请节点
    new_node = (struct Node*) malloc(sizeof(struct Node));
    printf("Enter the data of node %d: ", i+1);
    scanf("%d", &new_node->data);

    // 处理指针
    new_node->prev = tail;
    new_node->next = NULL;

    if (head == NULL) {
      // 如果链表为空,设置头指针为新节点,尾指针也为新节点
      head = new_node;
      tail = new_node;
    } else {
      // 如果链表不为空,将新节点连接到尾节点
      tail->next = new_node;
      tail = new_node;
    }
  }

  return head;
}

该函数实现了动态创建n个节点的双向链表。

如何计算节点数?

计算双向链表的节点数可以用一个循环来实现,直到节点的指针为NULL。

int countNodes(struct Node* head) {
  int count = 0;
  struct Node* curr = head;

  while (curr != NULL) {
    count++;
    curr = curr->next;
  }

  return count;
}

该函数会遍历整个链表,直到尾节点,每经过一个节点,计数器加1,最后返回计数器值。

总结

本文介绍了如何创建一个n个节点的双向链表并计算节点数,涉及了链表结构、动态内存申请和计算节点数的基础知识点。希望读者通过本文的学习能够深入理解双向链表的结构和实现原理。