数据结构--线性表的链式存储结构

news2025/7/4 20:12:52

这里写目录标题

  • 链式存储结构
  • 链表
    • 简介
    • 格式
    • 分类
    • 头结点
      • 位置
      • 示意图
      • 与不带头结点的区别
    • 链表的特点
  • 单链表
    • 定义
      • 链表的代码实现
        • 简介
        • 实操
    • 基本操作的实现
      • 初始化单链表
      • 销毁单链表
      • 清空单链表
      • 求单链表表长
    • 二级目录
    • 二级目录
    • 二级目录
    • 二级目录
    • 二级目录
    • 二级目录

链式存储结构

链表

简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

格式

在这里插入图片描述

案例
在这里插入图片描述
开头是头指针H 指向第一个数据元素的数据域,之后第一个数据元素的指针域指向第二个元素的数据域,由此连接成一个链表,最后末端是一个空指针,记作“^”
在这里插入图片描述

分类

在这里插入图片描述

头结点

位置

在这里插入图片描述
头指针只是一个指针域,没有数据域,头结点有数据域和指针域

示意图

在这里插入图片描述

与不带头结点的区别

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
数据域任意存放数据,可以用来存放线性表的长度等信息,但是头结点不计入链表的长度值

链表的特点

在这里插入图片描述

单链表

定义

链表的代码实现

简介

在这里插入图片描述
首先,对于一个结点来说,包含两个东西,一个是数据域,一个是指针域,用代码实现一个结点的时候,要用结构体,
第二,结构体里面,对于数据域的定义,使用表中的数据类型对应即可,对于指针域,因为其指向的是下一个结点,而每个结点都是一个结构体,所以,指针的类型是结构体类型,与自己所在的结构体一模一样
第三,typedef 是对后面圈起来的结构体起别名,相当于Java中对一个类起了一个别名,后面的Lnode 以及 *LinkList都是结构体的别名,二者是两种不同的形式

对于Lnode,可以直接利用它来定义一个对象,之后利用该对象调用结构体中的数据,这样这个对象就是结点本身
也可以,定义一个该类型的指针,用指针来操作结构体中的数据,这样指针就是指向结点的,如下图
在这里插入图片描述
而对于定义指针可以有更简便的方法,因为还定义了一个别名 是 *LinkList,所以可以直接,LinkList p
如下图
在这里插入图片描述

实操

在这里插入图片描述
定义链表,以及定义结点时,通常采用图中黄色部分

注意别忘了,头指针表示整个链表

在这里插入图片描述
右边为统一的定义方式,将所有数据打包为一个结构体,之后直接定义结构体类型的数据域

基本操作的实现

初始化单链表

在这里插入图片描述
空表定义,对于引用类型的参数,详情见上一篇文章“补充”,大致是,形参和实参共用一个地址
在这里插入图片描述

销毁单链表

在这里插入图片描述
首先将头指针的值赋值给结点指针p,之后要把第一个结点的指针域赋值给头指针L,以便L可以下移,找到下一个结点

之后销毁第一个结点,再把L的值赋给p,L再下移,这样循环,就可以销毁单链表

在这里插入图片描述

清空单链表

思路与销毁差不多,只不过新定义了一个指针,用来代替销毁时的L,这时L保持不动,用于保留头指针和头结点,最后将头结点的指针域置空即可
在这里插入图片描述
在这里插入图片描述
循环顺序与销毁有所不同,这里顺序不同,一定程度上影响着循环条件的判断,具体问题具体分析即可

求单链表表长

在这里插入图片描述
在这里插入图片描述
注意,p所指向的是一个结点,所以,p有值,那么就表示有结点,最后p指向空的时候,就会跳出循环
注意 头结点不计入长度,长度从首元结点算起

二级目录

二级目录

二级目录

二级目录

二级目录

二级目录

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

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

相关文章

QML学习day1

QML学习day1 main.qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.5Window {width: 640height: 480visible: truecolor:"blue"title: qsTr("Hello World")Button {//按钮id: btn1width: 50height: 50focus: true //聚焦…

P106-100组A卡(R5 240)指南

P106-100组A卡(R5 240)指南 不建议小白尝试 不建议小白尝试 不建议小白尝试文章目录 P106-100组A卡(R5 240)指南资料合集硬件软件基础卸载所有原驱动安装驱动修改注册表自动调用——只改一个注册表手动调用——改两个注册表 劝退…

软件设计原则

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。 开闭原则 对扩展开放,对修改关闭。在程序…

Leecode402:移掉 K 位数字

这道题一看想的是可能用回溯或者什么别的方法,但是那样的话时间复杂度非常高,而且也不适用于动态规划,所以观察的话,可以知道从前往后判断的话肯定是前面越小越好,所以只需要前面最小,整体就最小。因此从前…

子网掩码详解

1 子网掩码 IP地址是以网络号和主机号来标示网络上的主机的,我们把网络号相同的主机称之为本地网络,网络号不相同的主机称之为远程网络主机,本地网络中的主机可以直接相互通信;远程网络中的主机要相互通信必须通过本地网关&#…

酸蚀刻对钛医药材料纳米形态表面特性及活化能的影响

引言 由于商业纯钛(CP Ti)具有抗腐蚀性,并且具有哦合适的机械性能以及生物相容性,因此,目前一直被用作牙科植入材料。为了在临床手术中获得高水平的成功,CP Ti的表面质量和形貌是影响植入手术结果的最关键因素之一,近…

GPT使用技巧

五大原则 想要让ChatGPT产出有效的回答,需要遵循以下五个原则: 提问清晰: 请尽可能清晰地描述您的问题 简明扼要: 请尽量使用简单的语言和简洁的句子来表达您的问题 确认问题: 请确认您的问题是清晰、明确和完整…

python接口自动化--token登录(详解)

简介 为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。有些登录不是用 cookie 来验证的,是用 token 参数来判断是否登录。token 传参有两种一种是放在请求头里,本质上是跟 cookie 是一样的&…

攻不下dfs不参加比赛(十一)

标题 为什么练dfs题目为什么练dfs 相信学过数据结构的朋友都知道dfs(深度优先搜索)是里面相当重要的一种搜索算法,可能直接说大家感受不到有条件的大家可以去看看一些算法比赛。这些比赛中每一届或多或少都会牵扯到dfs,可能提到dfs大家都知道但是我们为了避免眼高手低有的东…

手把手教会你使用Markdown

目录 一、Markdown是什么 二、Markdown优点 三、Markdown的基本语法 一、Markdown是什么 Markdown 是一种轻量级标记语言,创始人为约翰格鲁伯(John Gruber)。 Markdown 允许人们使用易读易写的纯文本格式编写文档,然后转换成…

四川大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 四川大学(B)考研难度(☆☆☆☆) 四川大学计算机考研招生学院是计算机学院、网络空间安全学院和视觉合成图形图像技术国防重点学科实验室。目前均已出拟录取名单。 四川…

【Linux】多线程(三)

文章目录 线程池线程安全的单例模式什么是单例模式什么是设计模式单例模式的特点饿汉实现方式和懒汉实现方式饿汉方式实现单例模式懒汉方式实现单例模式懒汉方式实现单例模式(线程安全版本) STL,智能指针和线程安全STL中的容器是否是线程安全的?智能指针是否是线程安全的? 其…

一维数组、二维数组与指针的关系以及理解

一维数组、二维数组与指针的关系以及理解 C语言中,关于数组与指针,我们一般理解为:数组名即为该数组首元素地址,也是数组的首地址,但是关于数组名与指针的联系远不止于此。 文章目录 一维数组、二维数组与指针的关系以…

指针作为输入参数和输出参数

指针作为输入参数 指针作为输出参数 可以知道,改变的是地址里面的值。

Jmeter性能测试 —— 性能测试的流程和术语

性能测试的流程 一、准备工作 1、系统基础功能验证 一般情况下,只有在系统基础功能测试验证完成、系统趋于稳定的情况下,才会进行性能测试,否则性能测试是无意义的。2、测试团队组建 根据该项目的具体情况,组建一个几人的性能测试…

3DE重客户端安装

3DE重客户端安装 一、百度网盘下载路径二、详细安装步骤 一、百度网盘下载路径 https://pan.baidu.com/s/16TltMRbrWuSe7p-Vn1x4Dw?pwdfku7 提取码:fku7 二、详细安装步骤 1、将\3deinstall\2022x_install_GA目录下的所有.tar文件全选解压 2.点击\3deinstall\…

❤️创意网页:创建一个浪漫的樱花飘落动画效果

✨博主:命运之光 🌸专栏:Python星辰秘典 🐳专栏:web开发(简单好用又好看) ❤️专栏:Java经典程序设计 ☀️博主的其他文章:点击进入博主的主页 前言:欢迎踏入…

web自动化测试

Web自动化测试全套实战教程:PythonSelenium4环境搭建 1.首先,对于想学自动化测试的朋友,那么你得懂一种语言,常用的比如Java或者Python。因为没有语言基础,你是写不出自动化脚本的。 我个人选择python 2.有了开发语言…

数据结构---手撕图解二叉树(含大量递归图解)

文章目录 写在前面二叉树的创建二叉树的遍历前序遍历中序遍历后序遍历层序遍历 二叉树的销毁二叉树节点个数二叉树叶子节点的个数二叉树查找值为x的节点二叉树是否为完全二叉树 写在前面 二叉树的几乎所有实现都是依靠递归实现,递归的核心思路是把任何一个二叉树看…

什么是 CAS(自旋锁)? 它的优缺点? 如何使用CAS实现一把锁?

什么是自旋锁? CAS 没有获取到锁的线程是不会阻塞的,通过循环控制一直不断的获取锁。 CAS: Compare and Swap,翻译成比较并交换。 执行函数 CAS(V,E,N) CAS 有 3 个操作数,内存值 V&#xff…