21xrx.com
2024-09-20 08:36:29 Friday
登录
文章检索 我的文章 写文章
C++动态链表的创建方法
2023-07-11 21:34:44 深夜i     --     --
C++ 动态 链表 创建方法

C++是一种非常强大的编程语言,它提供了许多数据结构和算法来帮助开发人员在各种应用场景中创建高效的程序。其中,链表是一种非常重要的数据结构,它可以实现高效的数据存储和查找。下面让我们来了解一下如何在C++中创建动态链表。

动态链表是一种动态分配内存的链表,它可以根据需要动态地添加和删除节点。与静态链表相比,动态链表的空间利用率更高,同时也更加灵活。

首先,我们需要定义一个链表节点的结构体,它包含两个属性:数据和指针。其中,数据是节点存储的数据,指针指向下一个节点。


struct Node {

  int data;

  Node* next;

};

接着,我们需要定义链表的头指针和尾指针,它们分别指向链表的第一个节点和最后一个节点。初始状态下,链表为空,头指针和尾指针都设为NULL。


Node* head = NULL;

Node* tail = NULL;

然后,我们需要编写几个基本的链表操作,包括创建节点、添加节点和删除节点。

创建节点的函数非常简单,只需要在堆上分配内存,然后为节点的数据和指针属性赋值。


Node* createNode(int data) {

  Node* newNode = new Node;

  newNode->data = data;

  newNode->next = NULL;

  return newNode;

}

添加节点的函数分为两种情况:添加在链表的头部和添加在链表的尾部。如果链表为空,那么新节点既是头节点又是尾节点,否则,如果是头部添加,那么需要将新节点的next指针指向原头节点,并将新节点赋值给头指针;如果是尾部添加,那么需要将原尾节点的next指针指向新节点,并将新节点赋值给尾指针。


void addNodeToHead(int data) {

  Node* newNode = createNode(data);

  if (head == NULL)

   head = newNode;

   tail = newNode;

 

  else

   newNode->next = head;

   head = newNode;

 

}

void addNodeToTail(int data) {

  Node* newNode = createNode(data);

  if (head == NULL)

   head = newNode;

   tail = newNode;

 

  else

   tail->next = newNode;

   tail = newNode;

 

}

最后,是删除节点的函数。删除节点时需要先判断链表是否为空,如果为空则直接返回,否则需要遍历链表找到要删除的节点,如果找到了则将该节点从链表中删除,否则什么也不做。


void deleteNode(int data) {

  if (head == NULL)

   return;

 

  if (head->data == data) {

   Node* temp = head;

   head = head->next;

   delete(temp);

  }

  else {

   Node* prev = head;

   Node* curr = head->next;

   while (curr != NULL && curr->data != data)

     prev = curr;

     curr = curr->next;

   

   if (curr != NULL) {

     prev->next = curr->next;

     delete(curr);

     if (prev->next == NULL)

      tail = prev;

    

   }

  }

}

到这里,我们已经完成了动态链表的创建方法。使用这些基本操作函数,我们可以很容易地创建任意长度、任意数据类型的动态链表,实现高效的数据存储和查找。

  
  

评论区

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