初识单链表/单链表头指针的创建

news2024/10/2 12:21:27
链表的概念及结构
        概念: 链表 是一种 物理存储结构上非连续、非顺序的存储结构。链表 不像 数组中的元素那样,每个数据的的地址是连续的。
    数组 的物理存储结构

                  数组中上一个数据的地址和下一个数据的地址是连续的,正好差一个整型大小

 

  链表的物理存储结构:

                                         各个数据的地址之间是没有任何关系的 

 如何找到链表中的各个数据:

       上图说明数据元素是分散在内存的各个位置的。因此也就无法在通过顺序存储的方式去表示各个元素之间的关系了。那现在就有问题了,所谓的数据结构不仅要有数据还要求数据之间要能联系起来,现在如何来关联各个元素之间的关系呢

       可以使用指针的方式来表示各个数据元素之间的联系。就要在每一个数据元素之间存储一个指针地址,表示与之相关联的数据元素的地址。因此使用链式存储结构比顺序存储结构多了一个缺点,就是需要使用一部分空间来保存数据元素之间的关系。

    链表这种数据结构中每一个数据元素的结构如下:

 

                                                指针next指向下一个数据元素的地址 

       在链表这种数据结构中,称每一个数据元素为一个节点。那我们来看一下这一个个节点是如何关联起来形成一个线性结构的: 

 

       每一个节点存储自身的数据,并且连接自己的下一个节点。一个节点扣着一个节点,跟我们现实中的锁链非常的相似,因此我们将这种数据结构称之为链表 。

单链表的操作
       现在链表这种数据结构已经构建出来了。数据可以存储了,各个数据之间也联系起来了。那么现在的问题就是如何使用这种数据结构,让他存储我们想要的数据,并能为我们所用。

还是从常规的操作入手:插入,删除,查找

创建

 

       说到创建链表,其实是非常有意思的。上面我们已经知道,链表中的每一个节点都是可以动态创建的。因此当没有数据的时候,要创建一个链表是怎么创建呢?其实所谓的创建链表就是创建一个指向链表节点类型的指针,这个指针我们称它为链表的“头指针”,这个头指针有一个非常重要的特性,那就是这个指针永远指向这个链表的第一个节点。

不要小瞧这个头指针,这个头指针是非常重要的,绝对不能丢失。这边可以仔细思考一下为什么这个头指针不能丢失?

结合一下上面单链表这个数据结构的特性:没一个节点只保留这个节点本身的数据以及下一个节点的位置。那么就有一个问题了,如果想要知道第 n 个节点的值,就需要先知道第 n-1 个节点的地址然后根据 n-1 节点的 next 指针获取第 n 个节点的地址从而获取值。

那么 n-1 个节点的地址从何而来,只能从 n-2,以此类推最后肯定会找到第一个节点。那第一个节点的地址有如何知道呢?

因此需要有一个指针始终指向第一个节点。并且这个指针不能丢失,因为从上面可以得知,如果这个指针丢失了,那么这个链表就永远都找不到了。

因此创建一个链表,其实就是创建一个指针。因为这个链表一开始没有任何节点因此,让这个指针指向null 表示当前链表没有任何数据元素。如下:

                                                             

 

用代码创建如下: 

typedef struct SListNode
{
	SLTDateType data;
	struct SListNode* next;
}SListNode;
int main(){
    SListNode*plist=NULL;
    return NULL;
}

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

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

相关文章

做副业找不到好项目?公众号依旧是最优选择

大家好,我是蝶衣王的小编,今天分享一下公众号还是否值得做呢 说到做自媒体账号赚钱,有些人可能会说是2022年谁看公众号,阅读量都不如以前了,大家都跑去刷短视频。其实不错,但是对于不想露脸的人来说&#…

深圳大学数学文化赏析MOOC第二次作业答案(满分)

一、单选题 (共 40.00 分) 1. 以下各数集中,不可数的一个是( ) A. 自然数集 B. 整数集 C. 有理数集 D. 无理数集 满分:2.00 分 得分:2.00 分 你的答案: D 正确答案: D 教师评…

java计算机毕业设计ssm重点实验室系统

项目介绍 本重点实验室系统是针对目前仓库的实际需求,从实际工作出发,对过去的重点实验室系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。 本系统结合计算机系统的结构、概念、…

机器学习100天:目录

《机器学习100天》!理论python!实战真正的从零开始机器学习,循序渐进,适合初学者快速入门和进阶! 思维导图: 第0章:准备工作 001 开发环境搭建 第1章:数据预处理 002 导入数据集 …

超级简单的vue课程设计电商购物系统,没有数据库文件,通过模拟数据操作

详细地址:《《《下载地址》》》 基于vue前端项目开发的电商购物系统,主要包括商品的列表、商品的详细页、加入购车、注册、用户登录用户等基本的功能。适合于课程设计,该项目的开发没有用到MYSQL数据库,通过模拟数据进行读取&…

转行如何自学Python并且找到工作,分享自己心得

我是25岁转行学python的。说实在,转行就是奔着挣钱去的。希望我的经历可以给想转行的朋友带来一点启发和借鉴。 先简单介绍下个人背景,三流大学毕业,电子商务专业,学习能力一般,没啥特别技能,反正就很普通…

Charles mock数据:

前提:确保手机已和PC上的Charles代理链接成功。 我们在平时的业务开发中,经常有端上已开发完成,但后端接口还没有Ready的情况;或者需要接口频繁变更数据来测试各种case的情况。这样如果过度依赖接口,肯定会极大降低我…

[附源码]Node.js计算机毕业设计糕点销售网站Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

毕业设计-基于大数据的房地产数据分析与预测-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

【Numpy】Numpy光速起步(初学者必备基础知识)

Ding Jiaxiong【2022-12-16】 Gitee仓库:https://gitee.com/DingJiaxiong/machine-learning-study.git 文章目录导入numpy认识数组数组的更多信息创建基本数组添加、删除和排序元素数组的形状和大小重塑数组将一维数组转换为二维数组【即如何向数组中添加新轴】索引和切片从现有…

jsp+ssm计算机毕业设计病历管理系统设计【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

Qt中几个函数的使用方法

一、把字符串转换成整形 demo1: QString str "FF"; bool ok; int hex str.toInt(&ok, 16); // hex 255, ok true int dec str.toInt(&ok, 10); // dec 0, ok false demo2: bool ok; QString line "123"; int line1 line.toInt(&ok)…

重新认识CSS的尺寸体系,熟悉但是不多

前情提要 为了丰富自己是知识体系(为了日更薅羊毛),我最近频繁翻阅MDN的文档,果然MDN文档常看常新。 今天翻到CSS部分,然后发现width和height里,有几个属性值眼熟但是不多,值得好好研究一下&a…

马士兵内部共享—1658页《Java面试突击核心讲》

为助力广大程序员朋友 “面试造火箭”,小编今天给大家分享的便是这份马士兵内部的面试神技——1658页《Java面试突击核心讲》! 面试神技——1658页《Java面试突击核心讲》 主要包含:Java基础、JVM、多线程、MySQL、Spring、SpringBoot、Spr…

HTML期末作业 蛋糕bootstrap响应式网站html+css+javascript+jquery+bootstarp

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

接手项目代码,作为测试我做了什么

推荐阅读: [内部资源] 想拿年薪30W的软件测试人员,这份资料必须领取~ Python自动化测试全栈性能测试全栈,挑战年薪40W 从功能测试进阶自动化测试,熬夜7天整理出这一份超全学习指南【附网盘资源】 测试人员如何快速熟悉项目代码…

Linux操作系统的安全合规性检查和加固

1. 账号和口令 1.1 禁用或删除无用账号 减少系统无用账号,降低安全风险。 操作步骤 使用命令 userdel 删除不必要的账号。 使用命令 passwd -l 锁定不必要的账号。 使用命令 passwd -u 解锁必要的账号。 1.2 检查特殊账号 检查是否存在空口令和root权限的账号…

企业员工电脑软件应该如何选择?

现在很多企业都希望购买上网行为管理软件,因为这种软件可以控制员工的行为,可以避免员工在工作的时候做与工作无关的事情。但是这种软件应该如何采购,很多企业都搞不懂,现在就来看看在购买上网行为管理软件时应该如何选择。 1. 监…

presto查hive报错:end index must not be greater than size 问题分析和解决

tips presto 0.208连接hive有不少坑,请尽量不要选择这个版本。presto0.208以上的版本,jdk需要8_151。 问题还原: 集群环境 hive 1.1.0 presto 0.208 hadoop 2.6 集群有张hive表使用hive-cli查询是OK, 但是使用presto cli进行selec…

怎样才算完整的接口自动化测试案例?

代码 VS 低(零)代码平台 你在公司里开展自动化测试,是使用纯代码的方式还是利用已有的低代码或者零代码平台?本人的观点,一直很清晰,自动化测试,最佳的方案就是走纯代码。为啥?一定…