十天学完基础数据结构-第四天(链表(Linked List))

news2024/10/7 18:27:06

在这里插入图片描述

链表的基本概念

链表是一种线性数据结构,与数组不同,链表的元素(节点)之间通过指针相互连接。链表有以下基本概念:

  • 节点:链表中的每个数据项称为节点,每个节点包含数据和一个指向下一个节点的指针。

  • 头节点:链表的第一个节点称为头节点,它通常用来表示整个链表的起始位置。

  • 尾节点:链表的最后一个节点称为尾节点,它的指针通常指向空值(null)。

单链表和双链表的区别

链表可以分为单链表双链表两种主要类型。

  • 单链表:每个节点只包含指向下一个节点的指针。单链表具有较小的内存开销,但不能轻松地反向遍历。

  • 双链表:每个节点包含指向下一个节点和上一个节点的指针。双链表允许双向遍历,但内存开销较大。

链表的常见操作

链表支持以下常见操作:

  1. 插入节点:在链表中插入一个新节点,通常需要更新相邻节点的指针。

  2. 删除节点:从链表中删除一个节点,通常需要更新相邻节点的指针。

  3. 反转链表:将链表中的节点顺序颠倒。

  4. 获取链表长度:获取链表中节点的数量。

下面是一个简单的C++示例,创建一个单链表,插入和删除节点,以及获取链表长度:

#include <iostream>

// 链表节点定义
struct Node {
    int data;     // 节点数据
    Node* next;   // 指向下一个节点的指针
};

int main() {
    // 创建链表头节点
    Node* head = nullptr;
    
    // 插入节点
    Node* newNode1 = new Node;
    newNode1->data = 1;
    newNode1->next = nullptr;
    head = newNode1;

    Node* newNode2 = new Node;
    newNode2->data = 2;
    newNode2->next = nullptr;
    newNode1->next = newNode2;

    // 删除节点
    delete newNode1;
    head = newNode2;

    // 获取链表长度
    int length = 0;
    Node* current = head;
    while (current != nullptr) {
        length++;
        current = current->next;
    }

    std::cout << "链表长度:" << length << std::endl;

    return 0;
}

练习题:

  1. 单链表和双链表有什么主要区别?在什么情况下你会选择使用单链表或双链表?
  2. 描述一种情况,其中链表比数组更适合存储和管理数据。
  3. 如何在链表中插入一个新节点?这个操作的时间复杂度是多少?
  4. 如何删除链表中的一个节点?这个操作的时间复杂度是多少?

单链表和双链表有什么主要区别?在什么情况下你会选择使用单链表或双链表?

  • 单链表:单链表中的每个节点只包含一个指针,通常是指向下一个节点的指针。这种结构内存开销较小,但只能单向遍历。单链表适合在内存开销有限的情况下,需要单向访问数据的场景。

  • 双链表:双链表中的每个节点包含两个指针,一个指向下一个节点,另一个指向前一个节点。这允许双向遍历,但内存开销较大。双链表适用于需要双向遍历或频繁在链表中间插入和删除节点的情况。

选择使用单链表或双链表取决于需求。如果只需要单向访问或内存受限,单链表可能更合适。如果需要双向遍历或频繁插入和删除节点,双链表可能更合适。

描述一种情况,其中链表比数组更适合存储和管理数据。

链表比数组更适合以下情况:

  • 动态大小:当数据集的大小在运行时不断变化时,链表更适合,因为它可以动态分配和释放内存,而数组的大小通常是固定的。

  • 频繁插入和删除:如果需要频繁插入和删除数据项,链表比数组更高效,因为插入和删除操作的时间复杂度为O(1),而数组中的相同操作通常需要O(n)。

  • 没有随机访问需求:如果只需要按顺序访问数据而不需要随机访问(使用索引),链表是一个不错的选择。

如何在链表中插入一个新节点?这个操作的时间复杂度是多少?

插入新节点的步骤如下:

  • 创建一个新节点,设置其数据和指针。
  • 更新新节点的指针,使其指向原链表中适当位置的节点。
  • 更新原链表中相邻节点的指针,使其指向新节点。

这个操作的时间复杂度取决于插入位置。如果插入位置是已知的,时间复杂度是O(1),因为只需修改指针。如果需要在链表中间插入,并且需要遍历找到插入位置,时间复杂度是O(n),其中n是链表的长度。

如何删除链表中的一个节点?这个操作的时间复杂度是多少?

删除链表中的节点的步骤如下:

  • 找到要删除的节点。
  • 更新相邻节点的指针,将其跳过要删除的节点。
  • 释放要删除的节点的内存。

这个操作的时间复杂度取决于查找要删除的节点的时间。如果删除位置是已知的,时间复杂度是O(1),因为只需修改指针。如果需要遍历链表来查找要删除的节点,时间复杂度是O(n),其中n是链表的长度。

注意,在删除节点之前,始终要确保释放节点的内存,以避免内存泄漏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1059829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity2022】Unity实现手机游戏操控摇杆(实现操控轮盘)

文章目录 运行效果预览创建物体脚本获取RectTransform处理玩家拖动事件完整代码 获取输入运行其他文章 运行效果预览 首先展示一下本文章实现的效果&#xff1a; 创建物体 创建两个UI图像&#xff0c;一个用于表示背景&#xff0c;作为父物体&#xff0c;命名为JoyStick&am…

ubuntu安装ROS rosdep init rosdep update报错,完美解决方案!

ubuntu安装ROS rosdep init rosdep update报错&#xff0c;终于让我发现完美解决方法啦&#xff01;清华源解决 问题的原因完美解决&#xff01; 问题的原因 rosdep init&#xff0c;rosdep update报错的根本原因还是国内网络连不上外网。所以改DNS之类的方法都是比较偶然能成…

Windows安装Docker并创建Ubuntu环境及运行神经网络模型

目录 前言在Windows上安装Docker在Docker上创建Ubuntu镜像并运行容器创建Ubuntu镜像配置容器&#xff0c;使其可以在宿主机上显示GUI 创建容器并运行神经网络模型创建容器随便找一个神经网络模型试试 总结 前言 学生党一般用个人电脑玩神经网络&#xff0c;估计很少有自己的服…

nginx下载与安装教程

文章目录 nginx简介nginx的主要应用场景nginx开源项目的源码结构 使用centos7安装nginx检查centos版本号和linux内核版本检查是否安装gcc、pcre、zlib、openssl等依赖 安装nginx启动nginx停止nginx重启nginx nginx简介 nginx是一款业内流行、功能强大的web服务器。 高性能&…

会声会影2024中文版好用吗?

近些年&#xff0c;短视频逐渐走红并普及到各个领域&#xff0c;吸引着大量的自媒体从业者和爱好者投身于视频制作的热潮之中。视频剪辑软件作为视频制作不可或缺的工具&#xff0c;那么如何选择视频剪辑软件呢&#xff1f;视频剪辑软件哪个好&#xff1f; 一、视频剪辑软件有哪…

2023年,在CSDN拥有10000粉丝有多难?

该数据来源于粉丝数人数排行前5000名用户的关注用户列表中产生的&#xff0c;由于采集样本数有限&#xff0c;数据可能具有一定的误差&#xff0c;仅供参考&#xff0c;本次采样用户数大概在100万以上。 筛选条件人数粉丝人数大于50007519粉丝人数大于100003763粉丝人数大于500…

GJB 128B-2021标准版本变更汇总 ,发布, 下载

GJB 128B-2021标准版&#xff0c;下载 一、 概述 GJB 128B-2021半导体分立器件试验方法已于2022年3月1日实施&#xff0c;相对现行标准&#xff0c;新版标准对部分内容进行了变更。针对我司VDMOS产品涉及的各种方法&#xff0c;我司对新标准与旧标准的差异进行了分析。 二、 …

【AI视野·今日NLP 自然语言处理论文速览 第四十七期】Wed, 4 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Wed, 4 Oct 2023 Totally 73 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Contrastive Post-training Large Language Models on Data Curriculum Authors Canwen Xu, Corby Rosset, Luc…

国庆中秋宅家自省: Python在Excel中绘图尝鲜

【一】国庆中秋: 悟 【国庆中秋】双节来临,相信各位有自己度过的方式,而我却以独特的方式度过了一个说出来不怕各位见笑的双节; 双节到来,没有太多惊喜&#xff0c;也没有太多的负面情绪, 只是喜欢独处,静静反省这些年走过的酸甜苦辣&#xff1b;生活中的许多不欢而散,不期而遇…

反素数

198. 反素数 - AcWing题库 最大的反素数也就是约数个数最多的数中最小的那个数&#xff0c;可以考虑分解质因子形式 2、3、5、7、11、13、17、19、23、29这些&#xff0c;还有每个质因子的指数一定大于等于下一个质因子的指数&#xff0c;这样可以保证约数最多的时候数字尽可能…

基于SpringBoot的智能推荐的卫生健康系统

目录 前言 一、技术栈 二、系统功能介绍 用户管理 科室类型管理 医生信息管理 健康论坛管理 我的发布 我的收藏 在线咨询 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在…

【神印王座】陈樱儿假扮魔神皇,皓晨想杀人灭口,采儿施展禁制,月夜成功自保

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 神印王座动画即将更新&#xff0c;官方早早就公布了最新集的预告。虽然三大荒野部族已经全都被灭了&#xff0c;但是危险并没有解除&#xff0c;陈樱儿假扮魔神皇救人。逃出生天后&#xff0c;猎魔团与月夜商会…

数字电路逻辑 之 逻辑与逻辑运算

注意逻辑顺序&#xff0c; * 是大于 左边这一列与右边这一列是对偶关系&#xff0c;真值相同

【遮天】韩老魔被灭小囡囡现身,好消息叶凡终于不跑酷了,但有坏消息

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 遮天第25集已经更新了&#xff0c;和很多人一样这一集刚更新小郑就去看了。而这一集看下来&#xff0c;可以说信息量非常多&#xff0c;从韩老魔被灭到小囡囡现身&#xff0c;再到叶凡终于不跑酷了&#xff0c…

基于springboot+vue的人事系统

目录 前言 一、技术栈 二、系统功能介绍 员工信息管理 考勤信息管理 考勤信息管理 下班记录管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;作为学校以及一些培训机构&#xff0c;都在用信息…

【JavaEE】synchronized 原理

文章目录 前言synchronized 的加锁过程1.无锁 -> 偏向锁2. 偏向锁 -> 轻量级锁3. 轻量级锁 -> 重量级锁 锁的优化操作1. 锁消除2. 锁粗化 相关面试题 前言 前面我们学习了关于JavaEE多线程方面的锁策略以及 synchronized 分别对应哪些锁策略&#xff0c;并且我们还了…

读富爸爸财务自由之路后感

&#xff08;点击即可收听&#xff09; 再比如&#xff0c;S象限的人把自己的经验复制、业务扩大&#xff0c;开办公司&#xff0c;从而拥有B象限的收入 当你在左右两侧象限都有收入时&#xff0c;就像两条腿走路的人&#xff0c;才是真正安全。 但财务安全还不等于财务自由&am…

高精度算法模板

1.加法 string a1, b1; int a[5010], b[5010], c[5010]; signed main() {cin >> a1 >> b1;int len1 a1.size();int len2 b1.size();for (int i 1; i < len1; i) {a[i] a1[len1 - i] - 0;}for (int i 1; i < len2; i) {b[i] b1[len2 - i] - 0;}for (in…

想要精通算法和SQL的成长之路 - 岛屿数量和岛屿的最大面积

想要精通算法和SQL的成长之路 - 岛屿数量和岛屿的最大面积 前言一. 岛屿数量1.1 并查集数据结构构造1.2 使用并查集编码 二. 岛屿的最大面积 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 岛屿数量 原题链接 从这个题目的特性来看&#xff0c;它适合用并查集…

Vue中如何进行日历展示与操作

在Vue中创建交互式日历应用 在Web开发中&#xff0c;创建一个交互式的日历应用是一项常见的任务。Vue.js作为一个流行的JavaScript框架&#xff0c;提供了许多便捷的工具和组件来简化日历的开发。本文将介绍如何使用Vue来创建一个简单但功能强大的日历应用&#xff0c;包括展示…