数据结构(Chapter Two -03)—线性表的链式表示

在这一部分(数据结构(Chapter Two -01)—线性表及顺序表-CSDN博客)里面,我们知道线性表包括顺序表和链表结构。前面写了顺序表的基本操作,那这部分就写一写线性表叭!

链表特点:不需要使用地址连续的存储单元,即不要求逻辑上相邻的元素在物理地址上也相邻。

优点:插入和删除不需要移动元素(顺序表的缺点是需要移动)

缺点:不可以随机存取。需要额外的存放地址的指针域,浪费空间。

我们可以发现顺序表和链表的缺点和优点似乎恰好相反。来一个单链表结点的结构:

 我们可以看到指针域是存放下一个结点的地址的,每一个结点(除第一个)的读取都需要靠前一个结点读取,这就导致了缺点(不能随机读取)。

头指针:可用于标识一个单链表,如单链表L,头指针为NULL时表示一个空表

头结点:为了操作上面的方便,通常会为单链表附加一个头结点。头结点数据域可以不设置任何信息,也可以记录表长等信息。

头结点和头指针的区别:不管带不带头结点,头指针都始终指向链表的第一个结点,而头结点是带头结点的链表中的第一个结点,结点内通常不存储信息。

举个栗子,下图为带了头结点的单链表:

引入头结点两个优点:

1、由于第一个数据结点的位置被存放头结点的指针域中,因此在链表的第一个位置上的操作和在表的其他位置上的操作一致,无需特殊处理。

2、无论链表是否为空,其头指针都指向头结点的非空指针(空表中头结点的指针域为,但是可以存在)。

注意了空表可以存在头结点(不存在的时候就是NULL),但是空表长度为0,因此线性表长度是不包括头结点的。

由以上我们可以写出单链表的结点描述,代码如下:

typedef struct LNode{    //定义单链表结点类型
    ElemType data;      //数据域
    struct LNode* next; //指针域
}LNode,*LinkList;
//头插法构建单链表
LinkList List_HeadInsert(LinkList &L){//逆向建立单链表
    LNode *s;
    int x;                           
    L = (LinkList) malloc(sizeof(LNode));//创建头结点,L指向的那片区域是头结点
    L->next = NULL;                   //初始为空链表
    scanf("%d",&x);                   //输入结点的值
    while(x!=9999){                   //输入9999表示结束
        s=(LNode*)malloc(sizeof(LNode));//创建新结点
        s->data=x;
        s->next=L->next;
        L->next=s;                   //将新结点插入表中,L为头指针
        scanf("%d",&x);
    }
    return L;
}
//尾插法构建单链表
LinkList List_TailInsert(LinkList &L){//正向建立单链表
    int x;
    L = (LinkList)malloc(sizeof(LNode));
    LNode *s,*r =L;                   //r表示尾指针
    scanf("%d",&x);                   //输入结点的值
    while(x!=9999){                   //输入9999表示结束
        s=(LNode*)malloc(sizeof(LNode));
        s->data =x;
        r->next =s;
        r=s;                           //r指向新的表尾结点
        scanf("%d",&x);
    }
    r->next = NULL;                    //尾结点指针设置为空
    return L;
}

其中头插法和尾插法的区别:插入的位置不同,头插法每一次都是在头结点的下一个插入,尾插法就是每一次插入的是链表的末端。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Flink-1.17-教程】-【四】Flink DataStream API(7)输出算子(Sink)

【Flink-1.17-教程】-【四】Flink DataStream API(7)输出算子(Sink) 1)连接到外部系统2)输出到文件3)输出到 Kafka4)输出到 MySQL(JDBC)5)自定义 …

2024年第十二届亚洲机械与材料工程国际会议(ACMME 2024)即将召开!

时间:2024年6月14-17日 地点:日本京都先端科学大学太秦校区 会议官网:第11届ACMME |日本京都 2024年第十二届亚洲机械与材料工程会议 (ACMME 2024)将于2024年6月14日-17日在日本京都先端科学大学召开。亚洲机械与材料…

STL第二讲

第二讲 视频标准库源码版本:gnu c 2.9.1/4.9/Visual C OOP vs GP GP是将datas与methods分开,OOP相反; 为什么list不能使用全局的sort? 因为sort源代码: *(first (last - first)/2) // 此迭代器只能是随机访问迭代…

Jedis(一)与Redis的关系

一、Jedis介绍: 1、背景: Jedis是基于Java语言的Redis的客户端,Jedis Java Redis。Redis不仅可以使用命令来操作,现在基本上主流的语言都有API支持,比如Java、C#、C、PHP、Node.js、Go等。在官方网站里有一些Java的…

多维时序 | Matlab实现GWO-TCN-Multihead-Attention灰狼算法优化时间卷积网络结合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现GWO-TCN-Multihead-Attention灰狼算法优化时间卷积网络结合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现GWO-TCN-Multihead-Attention灰狼算法优化时间卷积网络结合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资料 效…

如何自己制作一个属于自己的小程序?

在这个数字化时代,小程序已经成为了我们生活中不可或缺的一部分。它们方便快捷,无需下载安装,扫一扫就能使用。如果你想拥有一个属于自己的小程序,不论是为了个人兴趣,还是商业用途,都可以通过编程或者使用…

VisualODX——ODX数据自动转换工具 加快开发进度

在创建ODX数据库的过程中,我们需要录入大量的数据以及应对多种数据格式。这不仅费时费力,而且还需很高的人力成本,且其错误率也非常高,从而导致开发速度缓慢、效率低下。基于多年的汽车行业诊断经验,我们开发了VisualO…

SpringBoot+Vue充电桩管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1. 分页获取预约数据代码2.保存预约信息代码3.修改订单状态代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootVue框架开发的充电桩管理系统。首先&…

【面试突击】微信亿级朋友圈的社交系统设计

微信亿级朋友圈的社交系统设计 先来说一下业务需求吧: 每个用户可以发朋友圈,可以点赞,评论可以设置权限,不看某些人朋友圈、不让某些人看你的朋友圈可以刷朋友圈中其他人的动态 对于这样的系统设计,主要从业务来考虑…

行测-判断:3.定义判断

行测-判断:3.定义判断 每道题先给出一个概念的定义,然后分别列出四种情况,要求报考者严格依据定义选出一个最符合或者最不符合该定义的答案。 A 1. 读得准 1.1 关键词(主体,客体) A B C,C选项…

2024年护眼台灯选购指南▏好视力、书客、欧普值得购买吗?

最近,护眼台灯备受关注,许多博主纷纷推崇。考虑到孩子即将放寒假,市场上的产品琳琅满目,因此我决定认真研究一番,辨别其中的劣质和精品。我选择了市场口碑较好的三款产品,进行了深入评估,主要从…

Tuya MiniApp 设计指南

一. 简介 小程序以其轻量、便捷的特性,在移动端 App 中被越来越广泛地使用。Tuya 作为物联网生态的头部 App 企业之一,开放 Tuya MiniApp 开发能力,以帮助开发者更好地服务用户。 对于开发者,Tuya MiniApp 以全新的开放模式&…

【Linux】文件周边001之系统文件IO

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.C语言文件IO 1.1…

二维码登录实现流程

二维码登录实现 如何实现登录? 二维码登录本质上也是一种登录认证方式。既然是登录认证,要做的也就两件事情! 告诉系统我是谁向系统证明我是谁 比如账号密码登录,账号就是告诉系统我是谁, 密码就是向系统证明我是谁…

2023年第十六届中国系统架构师大会(SACC2023):核心内容与学习收获(附大会核心PPT下载)

大会以“数字转型 架构演进”为主题,聚焦系统架构在数字化转型中的演进和应用。 与往届相比,本届大会最大的变化是从原来的大会演讲模式变革为专题研讨会模式。专题研讨会主题内容紧扣行业落地实践痛点与难点,多角度聚焦行业的架构演进之路。…

RabbitMQ进阶篇【理解➕应用】

🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于RabbitMQ的相关操作吧 目录 🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 一.什么是交换机 1.概念释义 2.例…

揭秘亚信安慧AntDB15年平稳运行的升级改造经验

亚信安慧AntDB是一款备受认可的国产化数据库系统,它在国内市场中积累了丰富的升级改造经验。光是大的版本升级就已经实现了8次,让AntDB持续保持了15年的平稳运行。本文将深入探索AntDB的升级改造之路,揭示背后的细节。 AntDB作为一款自主研发…

k8s图形化管理工具rancher

Rancher和K8s的关系,Rancher和K8s区别对比。简单来说,K8s(Kubernetes)为企业提供了一种一致的方式来管理任何计算基础架构,Rancher则是用于管理位于任何位置的Kubernetes集群的完整平台。如果用户是自己手动部署K8s集群…

java web mvc-08-Grails 入门介绍

拓展阅读 Spring Web MVC-00-重学 mvc mvc-01-Model-View-Controller 概览 web mvc-03-JFinal web mvc-04-Apache Wicket web mvc-05-JSF JavaServer Faces web mvc-06-play framework intro web mvc-07-Vaadin web mvc-08-Grails 开源 The jdbc pool for java.(java …

2024年,AIGC赛道专利文献和软著大全

一、周红伟-深度学习国际发明专利 深度学习国际发明专利 基于深度学习的图像检索方法及装置,专利公开公告号:CN107368614A。专利类型:发明公布。发明人:周红伟;李凯;任伟;李庆;郭奇杰;周杨;刘川郁 二、机器学习算法发表文献 Simul…