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

C++数据结构之单链表的实现可分为以下步骤:

1. 定义链表节点类

链表节点类需要包含两个成员变量,一个是存储数据的变量,另一个是指向下一个节点的指针变量。同时,需要实现构造函数和析构函数。

class Node{
public:
    int data;           // 存储节点数据
    Node* next;         // 指向下一个节点的指针

    Node(int data):data(data),next(nullptr){}     // 构造函数
    ~Node(){}           // 析构函数
};

2. 定义单链表类

单链表类需要简单定义两个私有成员变量,分别是头指针和链表长度。对外提供公有接口实现链表的基本操作,例如插入、删除、查找、遍历等。

class SinglyLinkedList{
private:
    Node* head;     // 头指针
    int length;     // 链表长度

public:
    SinglyLinkedList():head(nullptr),length(0){}      // 构造函数

    ~SinglyLinkedList(){
        // 遍历到链表尾部,依次删除每一个节点
        Node* cur = head;
        while(cur){
            Node* next = cur->next;
            delete cur;
            cur = next;
        }
    }

    // 在链表头部插入节点
    void insertAtHead(int data){
        Node* newNode = new Node(data);
        newNode->next = head;
        head = newNode;
        length++;
    }

    // 在链表尾部插入节点
    void insertAtTail(int data){
        Node* newNode = new Node(data);
        if(head == nullptr){
            head = newNode;
        }else{
            Node* cur = head;
            while(cur->next){
                cur = cur->next;
            }
            cur->next = newNode;
        }
        length++;
    }

    // 删除链表中第一个与指定值相等的节点
    void deleteNode(int data){
        Node* cur = head;
        Node* pre = head;
        while(cur){
            if(cur->data == data){
                pre->next = cur->next;
                delete cur;
                length--;
                return;
            }else{
                pre = cur;
                cur = cur->next;
            }
        }
    }

    // 查找链表中第一个与指定值相等的节点,并返回其地址
    Node* search(int data){
        Node* cur = head;
        while(cur){
            if(cur->data == data){
                return cur;
            }else{
                cur = cur->next;
            }
        }
        return nullptr;
    }

    // 遍历链表,并输出每个节点的值
    void traverse(){
        Node* cur = head;
        while(cur){
            cout << cur->data << " ";
            cur = cur->next;
        }
        cout << endl;
    }

    // 返回链表的长度
    int getLength(){
        return length;
    }
};

3. 示例说明

示例1

int main(){
    // 创建一个空链表
    SinglyLinkedList sl;

    // 在链表头部插入三个节点
    sl.insertAtHead(1);
    sl.insertAtHead(2);
    sl.insertAtHead(3);

    // 在链表尾部插入两个节点
    sl.insertAtTail(4);
    sl.insertAtTail(5);

    cout << "链表长度:" << sl.getLength() << endl;

    // 遍历链表,输出每个节点的值
    sl.traverse();

    // 删除值为3的节点
    sl.deleteNode(3);
    cout << "删除节点后的链表:" << endl;
    sl.traverse();

    // 查询值为4的节点
    Node* node = sl.search(4);
    if(node != nullptr){
        cout << "查找成功,节点值为:" << node->data << endl;
    }else{
        cout << "查询失败,未找到指定节点!" << endl;
    }

    return 0;
}

输出:

链表长度:5
3 2 1 4 5 
删除节点后的链表:
2 1 4 5 
查找成功,节点值为:4

示例2

int main(){
    // 创建一个空链表
    SinglyLinkedList sl;

    // 在链表头部插入三个节点
    sl.insertAtHead(1);
    sl.insertAtHead(2);
    sl.insertAtHead(3);

    // 遍历链表,输出每个节点的值
    sl.traverse();

    // 查询值为4的节点
    Node* node = sl.search(4);
    if(node != nullptr){
        cout << "查找成功,节点值为:" << node->data << endl;
    }else{
        cout << "查询失败,未找到指定节点!" << endl;
    }

    return 0;
}

输出:

3 2 1 
查询失败,未找到指定节点!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++数据结构之单链表的实现 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 一些常见的字符串匹配算法

    作者:京东零售 李文涛 一、简介 1.1 Background 字符串匹配在文本处理的广泛领域中是一个非常重要的主题。字符串匹配包括在文本中找到一个,或者更一般地说,所有字符串(通常来讲称其为模式)的出现。该模式表示为p=p[0..m-1];它的长度等于m。文本表示为t=t[0..n-1],它的长度等于n。两个字符串都建立在一个有限的字符集上。 一个比较常见…

    算法与数据结构 2023年4月25日
    00
  • 【ACM博弈论】SG函数入门(1):从巴什博奕到尼姆游戏

    在我小时候以前做题的时候,遇到博弈题往往都是漫无目的地打表找规律,或者找一些特殊情况但是没有很好的分析方法。 其实博弈题是有比较套路的解题方法的,那就是利用SG函数,第一节不会讲到SG函数的具体用法,我们先来博弈入个门,学习一下最基本的博弈类型:Nim游戏。 ? 作者:Eriktse? 简介:19岁,211计算机在读,现役ACM银牌选手?力争以通俗易懂的方式…

    算法与数据结构 2023年4月17日
    00
  • 数据结构 数组顺序存储详细介绍

    数据结构数组顺序存储详细介绍 什么是数组顺序存储? 数组是最基本的数据结构之一,在计算机程序中使用广泛。在数组中,存储的元素类型相同且占用相同的内存空间,可以通过下标进行快速访问和修改。数组可以使用不同的方法来存储在内存中,其中最简单的方法是数组顺序存储。 数组顺序存储是指将元素按照顺序依次存储在内存中的一块连续地址中,可以方便地进行随机访问。这种方式与链式…

    数据结构 2023年5月17日
    00
  • C++数据结构之哈希表的实现

    以下是详细的讲解: C++数据结构之哈希表的实现 哈希表的概念 哈希表是一种能够实现快速查找的散列表,通过将关键字映射到哈希表中的一个位置来实现快速查找。哈希表的查询、删除时间复杂度为O(1),操作效率非常高,所以常常被用来对大量数据进行检索。 哈希表的实现 哈希函数 哈希函数的主要作用就是将任意长度的输入数据转化为固定长度的散列值,一般采用对关键字进行取模…

    数据结构 2023年5月17日
    00
  • Java数据结构二叉树难点解析

    Java数据结构二叉树难点解析 什么是二叉树 二叉树是一种非常常见的数据结构,它具有以下特点: 每个节点都最多有两个子节点。 左子节点的值小于等于父节点的值,右子节点的值大于等于父节点的值。 二叉树可以用递归的方式实现,如下所示: class TreeNode { int val; TreeNode left; TreeNode right; TreeNod…

    数据结构 2023年5月17日
    00
  • 浅谈Python描述数据结构之KMP篇

    浅谈Python描述数据结构之KMP篇 简介 本篇文章将着重介绍KMP算法,其中包含KMP算法的基本原理、实现步骤以及Python代码实现示例。KMP算法是一种高效的字符串匹配算法,它可以在O(m+n)的时间内完成字符串的匹配操作,其中m和n分别为主串和模式串的长度。 基本原理 KMP算法(Knuth-Morris-Pratt算法)是一种字符串匹配算法,它的…

    数据结构 2023年5月17日
    00
  • C语言数据结构 栈的基础操作

    C语言数据结构 栈的基础操作 1. 栈的基本概念 栈(Stack)是一种基于LIFO(后进先出)原理的数据结构,类似于一组盘子,只能在盘子的顶部进行操作。每次从顶部添加或移除盘子。 栈具有两个基本操作:入栈(push)和出栈(pop)。当添加一个元素时,我们称其为“push”,当移除一个元素时,我们称其为“pop”。 2. 栈的实现 栈可以使用数组或链表来实…

    数据结构 2023年5月17日
    00
  • C数据结构中串简单实例

    下面我将为您详细讲解C语言中串的简单实例。 1. 什么是串 在C语言中,串(String)是由一系列字符组成的序列,是一种常见的数据类型。在C语言中,串通常是以字符数组(Char Array)的方式进行存储的。 2. 定义和初始化串 在C语言中,定义和初始化串可以通过以下方式进行: #include <stdio.h> #include <…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部