21xrx.com
2024-12-22 22:34:02 Sunday
登录
文章检索 我的文章 写文章
C++语言实现单链表数据结构
2023-07-11 10:38:30 深夜i     --     --
C++ 单链表 数据结构 链表节点 链表操作

单链表是数据结构中常用的一种数据结构,C++语言通过指针实现单链表十分方便,下面我们来一起学习如何使用C++语言实现单链表数据结构。

什么是单链表?

单链表是由一系列节点组成的链式结构,每个节点包含一个数据元素和一个指向下一个节点的指针。与数组不同,单链表的节点可以动态增加、删除,因此更加灵活。它是解决一些实际问题的良好选择。

C++实现单链表

定义节点

首先需要定义一个节点结构体,该结构体表示单链表中的每一个节点,包含数据和下一个节点的指针。

struct Node {

  int data;

  Node* next;

};

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

定义单链表

单链表的定义需要包含头节点,即第一个节点的前一个节点,方便许多操作的实现。同时,定义单链表类需要实现节点的插入、删除、查找等基本操作。

class SingleLinkedList {

public:

  SingleLinkedList();

  ~SingleLinkedList();

  Node* Find(int data);//查找节点

  void Insert(int data);//插入节点

  void Remove(int data);//删除节点

  void Print(); //打印节点数据

private:

  Node* head;//头节点

};

其中,查找、插入、删除和打印操作是单链表最基本的操作。

实现单链表

在单链表实现中,插入操作即为在指定位置的节点后插入新节点,删除操作即为删除指定节点,查找节点即为找到存储指定数据的节点。

首先,需要实现查找节点的函数,代码如下:

Node* SingleLinkedList::Find(int data) {

  Node* temp = head->next;

  while (temp != NULL) {

    if (temp->data == data)

      return temp;

    temp = temp->next;

  }

  return NULL;

}

其次,需要实现节点插入函数,代码如下:

void SingleLinkedList::Insert(int data) {

  Node* newNode = new Node;

  newNode->data = data;

  newNode->next = NULL;

  Node* temp = head;//头结点

  while (temp->next != NULL)

    temp = temp->next;//寻找最后一个节点

  temp->next = newNode;//将新节点插入到链表中

}

再次,需要实现节点删除函数,代码如下:

void SingleLinkedList::Remove(int data) {

  Node* temp = head;//头结点

  while (temp->next != NULL) {

    if (temp->next->data == data) {

      Node* deleteNode = temp->next;

      temp->next = deleteNode->next;//删除指定节点

      delete deleteNode;

      return;

    }

    temp = temp->next;

  }

}

最后,需要实现节点打印函数,代码如下:

void SingleLinkedList::Print() {

  Node* temp = head->next;

  while (temp != NULL)

    cout << temp->data << " ";

    temp = temp->next;

}

完整的单链表实现

下面是完整的单链表实现代码:

#include

using namespace std;

//定义节点

struct Node {

  int data;

  Node* next;

};

//定义单链表

class SingleLinkedList {

public:

  SingleLinkedList();

  ~SingleLinkedList();

  Node* Find(int data);//查找节点

  void Insert(int data);//插入节点

  void Remove(int data);//删除节点

  void Print(); //打印节点数据

private:

  Node* head;//头节点

};

SingleLinkedList::SingleLinkedList()

  head = new Node;//定义头结点

  head->next = NULL;

SingleLinkedList::~SingleLinkedList() {

  Node* temp = head;

  while (temp != NULL) {

    Node* deleteNode = temp;

    temp = temp->next;

    delete deleteNode;

  }

}

Node* SingleLinkedList::Find(int data) {

  Node* temp = head->next;

  while (temp != NULL) {

    if (temp->data == data)

      return temp;

    temp = temp->next;

  }

  return NULL;

}

void SingleLinkedList::Insert(int data) {

  Node* newNode = new Node;

  newNode->data = data;

  newNode->next = NULL;

  Node* temp = head;//头节点

  while (temp->next != NULL)

    temp = temp->next;//寻找最后一个节点

  temp->next = newNode;//将新节点插入到链表中

}

void SingleLinkedList::Remove(int data) {

  Node* temp = head;//头节点

  while (temp->next != NULL) {

    if (temp->next->data == data) {

      Node* deleteNode = temp->next;

      temp->next = deleteNode->next;//删除指定节点

      delete deleteNode;

      return;

    }

    temp = temp->next;

  }

}

void SingleLinkedList::Print() {

  Node* temp = head->next;

  while (temp != NULL)

    cout << temp->data << " ";

    temp = temp->next;

}

int main() {

  SingleLinkedList list;

  list.Insert(1);

  list.Insert(3);

  list.Insert(5);

  list.Insert(7);

  list.Remove(3);

  list.Print();

  return 0;

}

总结

单链表是数据结构中十分常用的一种类型,C++语言通过指针实现单链表操作方便、简单,是程序员们使用的一种良好选择。通过以上提供的单链表实现代码,您可以学习如何自己动手实现单链表操作。

  
  

评论区

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