数据结构链表的C++实现

石小疯  金牌会员 | 2025-3-12 20:17:27 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 993|帖子 993|积分 2979

在C++中实现链表是一种常见的练习,有助于理解指针和动态内存分配的概念。下面是一个简单的单向链表(Singly Linked List)的实现示例,包括基本的操作如插入、删除和遍历。
单向链表 (Singly Linked List) 实现

1. 界说节点结构

起首界说一个节点结构体,包罗数据部分和指向下一个节点的指针。
  1. [/code] cpp
  2. 深色版本
  3. [code]#include <iostream>
  4. using namespace std;
  5. // 定义节点结构
  6. struct Node {
  7.     int data;
  8.     Node* next;
  9. };
复制代码
2. 链表类界说

接下来界说一个链表类,包罗链表的基本操作:插入、删除、查找和打印。
  1. [/code] cpp
  2. 深色版本
  3. [code]class LinkedList {
  4. public:
  5.     Node* head;
  6.     // 构造函数初始化头节点为NULL
  7.     LinkedList() : head(nullptr) {}
  8.     // 插入节点到链表末尾
  9.     void append(int value) {
  10.         Node* newNode = new Node();
  11.         newNode->data = value;
  12.         newNode->next = nullptr;
  13.         if (head == nullptr) {
  14.             head = newNode;
  15.         } else {
  16.             Node* temp = head;
  17.             while (temp->next != nullptr) {
  18.                 temp = temp->next;
  19.             }
  20.             temp->next = newNode;
  21.         }
  22.     }
  23.     // 在指定位置插入节点
  24.     void insertAt(int index, int value) {
  25.         Node* newNode = new Node();
  26.         newNode->data = value;
  27.         if (index == 0) {
  28.             newNode->next = head;
  29.             head = newNode;
  30.         } else {
  31.             Node* temp = head;
  32.             for (int i = 0; temp != nullptr && i < index - 1; i++) {
  33.                 temp = temp->next;
  34.             }
  35.             if (temp == nullptr || temp->next == nullptr) {
  36.                 cout << "Index out of bounds" << endl;
  37.                 return;
  38.             }
  39.             newNode->next = temp->next;
  40.             temp->next = newNode;
  41.         }
  42.     }
  43.     // 删除指定值的节点
  44.     void deleteValue(int value) {
  45.         if (head == nullptr) {
  46.             cout << "List is empty" << endl;
  47.             return;
  48.         }
  49.         if (head->data == value) {
  50.             Node* temp = head;
  51.             head = head->next;
  52.             delete temp;
  53.             return;
  54.         }
  55.         Node* temp = head;
  56.         while (temp->next != nullptr && temp->next->data != value) {
  57.             temp = temp->next;
  58.         }
  59.         if (temp->next == nullptr) {
  60.             cout << "Value not found" << endl;
  61.             return;
  62.         }
  63.         Node* nodeToDelete = temp->next;
  64.         temp->next = temp->next->next;
  65.         delete nodeToDelete;
  66.     }
  67.     // 查找指定值的节点
  68.     bool search(int value) {
  69.         Node* temp = head;
  70.         while (temp != nullptr) {
  71.             if (temp->data == value) {
  72.                 return true;
  73.             }
  74.             temp = temp->next;
  75.         }
  76.         return false;
  77.     }
  78.     // 打印链表
  79.     void printList() {
  80.         Node* temp = head;
  81.         while (temp != nullptr) {
  82.             cout << temp->data << " -> ";
  83.             temp = temp->next;
  84.         }
  85.         cout << "NULL" << endl;
  86.     }
  87. };
复制代码
3. 测试链表功能

末了,编写一个主函数来测试上述实现的功能。
  1. [/code] cpp
  2. 深色版本
  3. [code]int main() {
  4.     LinkedList list;
  5.     // 插入一些节点
  6.     list.append(1);
  7.     list.append(2);
  8.     list.append(3);
  9.     // 打印链表
  10.     cout << "Initial list: ";
  11.     list.printList();
  12.     // 在索引1处插入新节点
  13.     list.insertAt(1, 4);
  14.     cout << "After inserting at index 1: ";
  15.     list.printList();
  16.     // 删除值为2的节点
  17.     list.deleteValue(2);
  18.     cout << "After deleting value 2: ";
  19.     list.printList();
  20.     // 查找值为3的节点
  21.     if (list.search(3)) {
  22.         cout << "Value 3 found in the list." << endl;
  23.     } else {
  24.         cout << "Value 3 not found in the list." << endl;
  25.     }
  26.     return 0;
  27. }
复制代码
运行结果示例

假设你运行了上述代码,输出可能会如下所示:
  1. [/code] 深色版本
  2. [code]Initial list: 1 -> 2 -> 3 -> NULL
  3. After inserting at index 1: 1 -> 4 -> 2 -> 3 -> NULL
  4. After deleting value 2: 1 -> 4 -> 3 -> NULL
  5. Value 3 found in the list.
复制代码
这个示例展示了怎样创建一个单向链表,并实现了插入、删除、查找和打印链表的基本功能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表