21xrx.com
2024-12-22 21:11:56 Sunday
登录
文章检索 我的文章 写文章
C++ 链表代码实现
2023-07-05 12:42:34 深夜i     --     --
C++ 链表 代码实现 链表操作 指针

在C++中,链表是一种非常常见的数据结构,可以用于许多应用场景,例如实现高效的内存管理和搜索数据,也可以用于动态构建树或图等数据结构。链表是一个由称为节点的对象组成的集合,其中每个节点包含指向下一个节点的指针。本文将介绍如何在C++中实现链表的基本代码。

链表的结构定义

链表由节点组成,每个节点包含了数据和指向下一个节点的指针。在C++中,可以使用结构体或者类来定义节点,以下是结构体定义的示例:


struct Node {

  int data;

  Node* next;

};

其中,data表示节点保存的数据,next是指向下一个节点的指针。

链表的创建和插入

在创建链表时,需要先定义一个头节点,表示链表的开始。另外,还需要定义一个指向当前节点的指针。在插入新节点时,只需要将新节点插入到指定位置,并将指针指向新节点。以下是创建链表和插入新节点的示例代码:


class LinkedList {

private:

  Node* head;

  Node* current;

public:

  LinkedList()

    head = new Node;

    head->next = nullptr;

    current = head;

  

  void insert(int data) {

    Node* newNode = new Node;

    newNode->data = data;

    newNode->next = current->next;

    current->next = newNode;

    current = newNode;

  }

};

在上面的代码中,创建链表时,将头节点的指针指向空,并将当前节点的指针指向头节点。在插入新节点时,先创建一个新节点,然后将新节点插入到当前节点的下一个,并将当前节点的指向新节点。

链表的遍历和删除

遍历链表时,只需要从头节点开始,依次遍历每个节点即可。在删除节点时,需要找到要删除的节点,然后将其前一个节点的指针指向其后一个节点即可。以下是遍历链表和删除节点的示例代码:


class LinkedList {

private:

  Node* head;

  Node* current;

public:

  LinkedList()

    head = new Node;

    head->next = nullptr;

    current = head;

  

  void insert(int data) {

    Node* newNode = new Node;

    newNode->data = data;

    newNode->next = current->next;

    current->next = newNode;

    current = newNode;

  }

  void traverse() {

    Node* p = head->next;

    while (p != nullptr)

      cout << p->data << " ";

      p = p->next;

    

    cout << endl;

  }

  void remove(int data) {

    Node* p = head->next;

    Node* pre = head;

    while (p != nullptr) {

      if (p->data == data)

        pre->next = p->next;

        delete p;

        return;

      

      pre = p;

      p = p->next;

    }

  }

};

在上面的代码中,遍历链表时,将指针从头节点开始往下遍历每个节点,直到指针指向空。在删除节点时,先找到要删除的节点,然后将其前一个节点的指向其后一个节点即可。

链表的应用

链表作为一种数据结构,在实际项目中有很多应用场景。例如,可以通过链表来实现栈或者队列,也可以作为哈希表的底层数据结构。此外,链表还可以用于实现字符串和向量等数据结构。总之,链表具有很大的灵活性和适应性,是C++中一个非常重要的数据结构。

  
  

评论区

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