【数据结构】C++实现链表数据结构

C++实现链表数据结构

前言

在数据结构课程中,链表是一种非常基础且重要的数据结构。链表允许动态地进行内存分配,因此相比数组具有更高的灵活性。本文将介绍如何使用C++实现一个单链表,并展示其基本操作,如插入、删除和遍历。

单链表节点结构

首先,我们需要定义链表的节点结构。每个节点包含一个数据域和一个指向下一个节点的指针。

cpp 复制代码
struct Node {
    int data;
    Node* next;
    
    Node(int val) : data(val), next(nullptr) {}
};

单链表类

接下来,我们定义一个单链表类,包含头节点指针和基本的链表操作。

cpp 复制代码
class LinkedList {
private:
    Node* head;

public:
    LinkedList() : head(nullptr) {}

    ~LinkedList() {
        Node* current = head;
        Node* nextNode;
        while (current != nullptr) {
            nextNode = current->next;
            delete current;
            current = nextNode;
        }
    }

    // 在链表末尾插入新节点
    void append(int value) {
        Node* newNode = new Node(value);
        if (head == nullptr) {
            head = newNode;
        } else {
            Node* temp = head;
            while (temp->next != nullptr) {
                temp = temp->next;
            }
            temp->next = newNode;
        }
    }

    // 删除值为value的第一个节点
    bool remove(int value) {
        if (head == nullptr) return false;

        if (head->data == value) {
            Node* temp = head;
            head = head->next;
            delete temp;
            return true;
        }

        Node* temp = head;
        while (temp->next != nullptr && temp->next->data != value) {
            temp = temp->next;
        }

        if (temp->next == nullptr) return false;

        Node* nodeToDelete = temp->next;
        temp->next = temp->next->next;
        delete nodeToDelete;
        return true;
    }

    // 打印链表中的所有元素
    void printList() const {
        Node* temp = head;
        while (temp != nullptr) {
            std::cout << temp->data << " ";
            temp = temp->next;
        }
        std::cout << std::endl;
    }
};

使用示例

下面是一个简单的使用示例,展示如何创建链表、插入节点、删除节点和打印链表。

cpp 复制代码
int main() {
    LinkedList list;
    list.append(1);
    list.append(2);
    list.append(3);
    list.printList();  // 输出: 1 2 3

    list.remove(2);
    list.printList();  // 输出: 1 3

    return 0;
}

总结

本文介绍了如何使用C++实现一个单链表数据结构,并展示了其基本操作。链表是数据结构中的基础,理解链表的实现和操作对于学习更复杂的数据结构非常有帮助。希望这篇文章能帮助你更好地理解和掌握链表。

相关推荐
布莱克6053 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
沫璃染墨7 小时前
从零入门计算机网络系列(十二):HTTP长连接与会话管理详解——从Connection到Cookie与Session
linux·服务器·c++·tcp/ip·ubuntu·http·交互
xiaoye-duck9 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(下):流式响应实现和测试
开发语言·网络·c++·语言模型
w_zero_one9 小时前
算法--构造
java·数据结构·算法
旖旎夜光10 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
小超人诞生日记11 小时前
C++ 智能指针的使用及其原理详解
c++·算法
akinggw12 小时前
libagentcore - 一个基于c++的AI多agent系统升级到2.0版本
开发语言·jvm·c++
繁星蓝雨12 小时前
C++设计原理———多重继承(虚基类、菱形继承、委托、重命名、基类和成员初始化)
c++·委托·多重继承·mi·显式初始化列·虚基类·对象布局
lisw0512 小时前
互联网上的数据结构可视化!
数据结构·信息可视化
旖旎夜光13 小时前
【C++ 基础入门】命名空间、输入输出、缺省参数与函数重载
开发语言·c++·笔记·学习