21xrx.com
2024-11-22 06:58:30 Friday
登录
文章检索 我的文章 写文章
C++编写简单单链表实现
2023-06-29 14:25:32 深夜i     --     --
C++ 单链表 实现

单链表是计算机科学中最常用的数据结构之一,其基本思路是将数据元素按照一定顺序链接在一起。C++是一门非常适合实现单链表的编程语言,其语法简单、易懂、灵活,并且支持面向对象的编程思想,可以方便的实现单链表的各种操作。

单链表由一个链表头和若干个节点组成,每个节点由两个部分组成:一个值域部分存放数据元素,一个指针部分存放下一个节点的地址。如下代码所示:


class Node {

public:

  int data;

  Node *next;

};

该代码定义了一个Node类,其中包含了一个数据域data和一个指针域next,这个指针指向下一个节点。这样每一个Node对象就表示一个节点,而指针next则表示这个节点所链接的下一个节点。使用这个类可以方便地实现单链表的各种操作。

接下来,我们需要实现一个链表类,该类负责管理整个链表的各种操作,如增加、删除、查找等。下面是一个简单的单链表类的实现:


class LinkedList {

public:

  LinkedList(): head(nullptr) {} //构造函数

  ~LinkedList(); //析构函数

  void insert(int value);  //插入节点

  void remove(int value);  //删除节点

  Node *find(int value);  //查找节点

private:

  Node *head; //链表头指针

};

LinkedList::~LinkedList() {

  Node *current = head;

  while (current != nullptr) {

    Node *temp = current;

    current = current->next;

    delete temp;

  }

}

void LinkedList::insert(int value) {

  Node *newNode = new Node;

  newNode->data = value;

  newNode->next = head;

  head = newNode;

}

void LinkedList::remove(int value) {

  Node *prev = nullptr;

  Node *current = head;

  while (current != nullptr && current->data != value)

    prev = current;

    current = current->next;

  

  if (current == nullptr)

    return;

   else if (prev == nullptr)

    head = current->next;

   else

    prev->next = current->next;

  

  delete current;

}

Node *LinkedList::find(int value) {

  Node *current = head;

  while (current != nullptr && current->data != value)

    current = current->next;

  

  return current;

}

该类中定义了三个成员函数:insert、remove和find。其中,insert用于将新节点插入到链表的前端,remove用于删除链表中指定值的节点,find则用于查找链表中指定值的节点。此外,还定义了一个析构函数,用于释放链表中所有节点的内存。

完整代码如下:


#include <iostream>

class Node {

public:

  int data;

  Node *next;

};

class LinkedList {

public:

  LinkedList(): head(nullptr) {} //构造函数

  ~LinkedList(); //析构函数

  void insert(int value);  //插入节点

  void remove(int value);  //删除节点

  Node *find(int value);  //查找节点

private:

  Node *head; //链表头指针

};

LinkedList::~LinkedList() {

  Node *current = head;

  while (current != nullptr) {

    Node *temp = current;

    current = current->next;

    delete temp;

  }

}

void LinkedList::insert(int value) {

  Node *newNode = new Node;

  newNode->data = value;

  newNode->next = head;

  head = newNode;

}

void LinkedList::remove(int value) {

  Node *prev = nullptr;

  Node *current = head;

  while (current != nullptr && current->data != value)

    prev = current;

    current = current->next;

  

  if (current == nullptr)

    return;

   else if (prev == nullptr)

    head = current->next;

   else

    prev->next = current->next;

  

  delete current;

}

Node *LinkedList::find(int value) {

  Node *current = head;

  while (current != nullptr && current->data != value)

    current = current->next;

  

  return current;

}

int main() {

  LinkedList list;

  list.insert(1);

  list.insert(2);

  list.insert(3);

  list.insert(4);

  list.remove(3);

  Node *node = list.find(2);

  std::cout << "find: " << node->data << std::endl;

  return 0;

}

以上就是使用C++编写简单单链表实现的全部内容,通过了解并实现这个过程,可以更好地理解单链表的基本思想和实现方法,对于后续的数据结构学习和应用开发都非常有帮助。

  
  

评论区

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