【数据结构学习3】线性表-链表、单链表

news2024/11/28 7:40:21

目录

  • 链式存储结构
    • 链表概念
    • 头结点的意义
  • 单链表的定义和表示
    • 单链表的基本操作

链式存储结构

链表概念

  1. 概念
  • 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理不一定相邻
  • 线性表的链式表示又称为非顺序映像链式映像
  • 用一组物理位置任意的存储单元来存放线性表的数据元素
  • 这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上
  • 链表中元素的逻辑次序物理次序不一定相同 (ai元素不一定在i-1的位置)
  • 单链表是由头指针唯一确定,因此单链表可以用头指针的名字来命名
  • 访问时只能通过头指针进入链表,并通过每个结点的指针域依次向后顺序扫描其余结点,所以寻找第一个结点最后一个结点所花费的时间不等
  • 各结点由两个域组成:
    • 数据域:存储元素数值数据
    • 指针域:存储直接后继结点的存储位置
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191103120643820.png
  1. 与链式存储有关的术语
  • 结点:数据元素的存储映像,由数据域和指针域两部分组成
  • 链表:n个结点由指针链组成一个链表,它是线性表的链式存储映像,称为线性表的链式存储结构
  1. 单链表、双链表、循环链表
  • 单(线性)链表:结点只有一个指针域的链表在这里插入图片描述
  • 双链表:结点有两个指针域的链表在这里插入图片描述
  • 循环链表:首尾相接的链表在这里插入图片描述
  1. 头指针、头结点、首元结点
  • 头指针:是指向链表中第一个结点的指针
  • 首元结点:是指链表中存储第一个数据元素a1的结点
  • 头结点:是在链表的首元结点之前附设的一个结点(可有可无)
    在这里插入图片描述

头结点的意义

  1. 如何表示空表
  • 无头结点时,头指针为空时表示空表 在这里插入图片描述
  • 有头结点时,当头结点的指针域为空时表示空表在这里插入图片描述
  1. 在链表中设置头结点有什么好处?
  • 便于首元结点的处理。首元结点的地址保存在头结点的指针域中,所以在链表的第一个位置上的操作和其他位置一致,无须进行特殊处理
  • 便于空表和非空表的同一处理。无论链表是否为空,头指针都是指向头结点的非空指针,因此空表和非空表的处理也就统一了
  1. 头结点的数据域内装的是什么?
    头结点的数据域可以为空,也可存放线性表长度等附加信息,但此结点不能计入链表长度值在这里插入图片描述

单链表的定义和表示

  • 单链表是由表头唯一确定的,因此单链表可以用头指针的名字命名。若头指针名是L,则把链表称为表L
  • 带头结点的单链表
    在这里插入图片描述
  • 单链表的存储结构
typedef struct Lnode //声明结点的类型和指向结点的指针类型
{
	ElemType data; //结点的数据域
	struct Lnode *next; //结点的指针域,指向这个Lnode类型的指针
}Lnode,*LinkList; //LinkList为指向结构体Lnode的指针类型
//定义链表L,两种
LinkList L; //因为LinkList本身就是指向Lnode的指针了,所以可以直接定义
Lnode *P;

单链表的基本操作

  1. 单链表的初始化
生成新结点作为头结点,用头指针L指向头结点;将头结点的指针域置空
Status InitLIst_L(LinkList &L)
{
	L=new LNode; //或L=(LinkList)malloc(sizeof(LNode));
	L->next=NULL; //->表示指针域
	return OK;
}

2.判断链表是否为空

判断头结点指针为空
//引用类型一般用在对原来链表修改的地方,
//判断链表是否为空不需要对原链表进行修改,所以不需要用引用
int ListEmpty(LinkList L){ 
	if(L->next) //非空
		return 0;
	else
		return 1;
}

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

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

相关文章

三公经费用泛微全过程数字化管理,使用有记录,付款有依据

公开透明是现代财政制度的重要准则和基本特征。组织要以公开、透明、科学的预算制度确定财政支出,贯穿预算编制、执行、监督全过程。 组织常见的费用管理——“三公”经费,通常指因公出国(境)费、公务用车购置及运行费、公务接待…

富士康转移3000亿产能,iPhone的印度产能倍增,不再“赏饭吃”

日前消息指今年三月份印度的iPhone产量已经是去年的四倍之多,占比将近7%,显示出苹果和富士康都在加速提升印度的iPhone产能,凸显出他们的决心,这对中国制造业将带来深远影响。一、富士康对中国制造影响巨大2021年的数据…

leetcode每日一题:数组篇(1/2)

😚一个不甘平凡的普通人,日更算法学习和打卡,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘 🤗专栏:每日算法学习 💬个人…

key的作用和原理、列表过滤

一、key的作用与原理 虚拟DOM对象的标识。当状态中的数据发生变化时,vue会根据新数据生成新的虚拟DOM。随后vue进行新虚拟DOM与旧虚拟DOM的差异比较,规则如下:对比规则: 旧虚拟DOM中找到了与新虚拟DOM相同的key 若虚拟DOM中内容没…

Iceberg 数据湖是什么?数据湖能解决什么问题?独立于计算层和存储层之间的表格层?

Iceberg 数据湖是什么?数据湖能解决什么问题?独立于计算层和存储层之间的表格层?0. 导读1. Hive数仓遇到的问题2. 一种开放的表格式3. 自下而上的元数据4. 高性能的查询4.1 分区剪裁4.2 文件过滤4.3 RowGroup过滤参考:https://ice…

kafka-4 生产者和消费者

kafka的生产者和消费者四、 生产者4.1 分区分配策略4.2 副本和消息消费4.2.1 副本(AR、ISR、OSR)4.2.2 HW与LEO4.2.3 ISR 集合和 HW、LEO的关系五、消费者5.1 分区分配策略5.2 消费者offset的存储四、 生产者 4.1 分区分配策略 (1&#xff…

【20】linux进阶——linux的数据流和重定向

大家好,这里是天亮之前ict,本人网络工程大三在读小学生,拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识,希望能提高自己的技术的同时,也可以帮助到大家 另外其它专栏请关注: 锐捷数通实验&…

一、LED子系统框架分析

个人主页:董哥聊技术我是董哥,嵌入式领域新星创作者创作理念:专注分享高质量嵌入式文章,让大家读有所得!文章目录1、前言2、LED裸机处理3、LED子系统框架4、LED子系统目录结构及核心文件5、sysfs目录结构5.1 确保LED子…

低代码开发重要工具:私有化部署的jvs-logic的设计与价值

逻辑引擎介绍 逻辑引擎是一种能够处理逻辑表达式的程序,它能够根据用户输入的表达式计算出表达式的值。在实际应用中,逻辑引擎通常被用于处理规则引擎、决策系统、业务规则配置等领域,具有广泛的应用前景。 逻辑引擎如下图所示,在…

Hive中SQL基本操作

文章目录1. Hive 中DDL1) 数据库操作2) 创建表 Create table3)内部外部表区别4) Create Table As Select (CTAS)4)分区表 partition2 .Hive中 DML1)从文件加载数据 Loading files into tables2)插入 INSERT3)更新 UPDA…

《疯狂Java讲义》读书笔记7

Navicat快捷键 刷新:FnF5 表内容页面打开表设计页面:CtrlD 打开 MYSQL 命令行窗口:FnF6 MYSQL 增减查改 create table student(stuid int not null auto_increment primary key,stuname varchar(200),stustatus varchar(100) ); create …

TCP/IP协议工作原理与工作流程

一、TCP/IP协议工作原理 1、OSI模型 使用OSI模型来描述一个网络中的各个协议层,如下: 2、理解TCP/IP协议 TCP/IP协议,英文全称Transmission Control Protocol/Internet Protocol,包含了一系列构成互联网基础的网络协议&#xff0…

本地部署ChatGLM-6B模型(使用JittorLLMs大模型推理库)

简介 网上冲浪时发现的这两个国产模型,重点是对硬件的要求并不高,有2GB内存就可以跑,觉得有趣就弄来玩了下。 https://github.com/Jittor/JittorLLMs https://github.com/THUDM/ChatGLM-6B 简单介绍下用到的仓库 ChatGLM-6B ChatGLM-6B 是…

有偏估计的发展及其在球谐函数拟合中的应用研究

有偏估计的发展及其在球谐函数拟合中的应用研究 阚昊宇 专业:大地测量与测量工程 学号:XXX 邮箱:XXX 电话:XXX 摘要:球谐函数在大地测量等领域具有重要意义,然而在观测量不多或空间分布不均匀时进行高阶…

视频编解码(一)之virtio-gpu环境搭建

一、基础概念 VA-API Video Acceleration API 是一组开源应用API接口,赋能应用(比如VLC播放器、GStreamer等)使用hardware video acceleration(一般是GPU提供硬件视频加速功能),VA-API主要由开源库libva和…

机器学习算法系列(三)

机器学习算法之–对数几率回归(逻辑斯蒂回归)算法 上个算法(算法系列二)介绍了如何使用线性模型进行回归学习,但若要做的是分类任务,则需要找一个单调可微函数将分类任务的真实标记y与线性回归模型的预测值…

Scons自动大型系统构建工具

1、先了解一下make 在Linux系统上做过c/c++开发的同学们都知道一个项目工程管理工具:make和Makefile。 make 这个工具自上个世纪 70 年代 Stuart Feldman 在贝尔实验室开发出以来,就一直是类 UNIX 程序员的最爱之一。 通过检查文件的修改时间,make 工具可以知道编译目标文…

关于原子服务的思考

在我们以往的工作中经常会遇到“原子服务”或“原子化服务”的概念,如果没有一个清晰的概念边界,会使大家的沟通和讨论无法在同一个共识上展开,大家不在同一频道上,割裂于不同的领域空间,难以产生一致性的进展。那么&a…

SAR ADC系列26:系统设计

目录 串一下知识点: 设计一个高速异步SAR ADC 设计目标: 电路架构:(具体电路看前文) 采样网络: 采样电容: CDAC开关切换策略: CDAC阵列冗余设计: SAR 逻辑 比…

谈谈内存模型happen-before讲的什么?

大家好我是易安! 今天我要讲述的是Java内存模型中的happen-before。 Java语言在设计之初就引入了线程的概念,以充分利用现代处理器的计算能力。多线程机制既带来了强大、灵活的优势,也带来了线程安全等令人混淆的问题。在这种情况下&#xff…