C语言单向链表、双向链表和循环链表有什么区别?

一、问题

        链表分为单向链表、双向链表和循环链表,它们的不同之处是什么呢?

二、解答

(1)单向链表。

        所谓单向链表,就是指数据结点是单向排列的。⼀个单向链表结点由两个域组成,存储在结构体类型中。⼀个域⽤于存放数据元素 data,其数据类型由应⽤问题决定,称为数据域;

        另⼀个域存放⼀个指向该链表中下⼀个结点的指针 link ,指向下 ⼀个结点的开始存储地址,称为链域或者指针域。

        例如,可以写成这样⼀个结构体类型。

struct NODE
{int number;char name[20];struct student *next;
};

        其中 number 和 name[20] ⽤来存放数据域中的数据信息;指针*next ⽤来存储下⼀个结点的指针,就是指针域部分。

        图下为⼀个简单的单向链表。

        单向链表有⼀个头结点,在图12.8 中以 head 表示,它存放头结点的地址,没有数据,只是⼀个指针变量,又叫做“头指针”。

        链表中的其余结点都有两个部分,即数据域和指针域。在 struct NODE 结构体中,number 和 name[20]的数据信息都存储在数据域中,相当于图中的 A、 B、 C、 D、E。next 是指针类型的成员,它指向 struct NODE 类型数据。 ⽤这种⾃⼰指向⾃⼰的数据类型的⽅法,就可以建⽴链表。链表的尾结点的 next 指针指向NULL。

(2)双向链表。

        当对单向链表进⾏操作时,若需要对某个结点的直接前驱进⾏操作, 就必须从链表头开始查找。因为单向链表的指针域是指向直接后继的结点,因此就出现了 既能存储直接后继结点地址的链域,又能存储直接前驱结点地址的链域,这就是⼀个双向链表。

        在双向链表中,结点除含有数据域外,还有两个指针域。⼀个存储直接后继结点的地址,称为右链域:另⼀个存储直接前驱结点的地址,称为左链域。

(3)循环链表。

        循环链表与单向链表⼀样,都含有⼀个数据域和⼀个指向直接后继结点的指针域。唯⼀不同的是,循环链表没有尾结点。循环链表的最后⼀个结点的指针指向该循环链表的第⼀个结点,或者表头结点,从⽽构成⼀个环形的链。在建⽴⼀个循环链表时,还可以在最后⼀个结点后插⼊⼀个新的结点。判断循环链表是否到结尾,就是判断该结点链域的值是否为表头结点。当链域值等于表头指针时,说明⼰到结尾。

三、总结

        单链表是最简单的⼀种链表。但是,在查找结点时,只能查找后继结点。然⽽,双向链表可以查找前驱结点和后继结点,在循环链表中则可以查找任意位置的结点,因为循环链表是⼀个环形的链表,由任意结点都可以遍历到所有结点。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis-分片集群存储及读取数据详解

文章目录 Redis分片集群是什么?Redis分片集群的存储及读取数据? 更多相关内容可查看 Redis分片集群是什么? Redis分片集群是一种分布式部署方式,通过将数据分散存储在多个Redis节点上,从而提高了系统的性能、扩展性和…

LNG船气体监测系统中甲烷传感器的应用

随着全球能源结构的转型和环保意识的增强,液化天然气(LNG)作为清洁、高效的能源,其运输需求日益增长。LNG船作为专门用于运输液化天然气的特种船舶,其安全性和可靠性直接关系到能源供应的稳定性和环境保护的有效性。在…

mybatis-plus(2)

上文我们介绍完mybatis-plus的常用注解,现在介绍 mp的基础的yaml配置 mybatis-plus:type-aliases-package: #该位置写 数据库对应实体类的全路径global-config:db-config:id-type: auto # 全局id类型为自增长 mp同时也是支持手写sql,而且mapper的读取地…

mac定时任务、自启动任务

https://quail.ink/mynotes/p/mac-startup-configuration-detailed-explanation <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.d…

数据库入门(sql文档+命令行)

一.基础知识 1.SQL&#xff08;Structured Query Language&#xff09;结构化查询语言分类&#xff1a; DDL数据定义语言用来定义数据库对象&#xff1a;数据库、表、字段DML数据操作语言对数据库进行增删改查DQL数据查询语言查询数据库中表的信息DCL数据控制语言用来创建数据…

CSS 块状元素

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

CV每日论文--2024.5.10

1、Attention-Driven Training-Free Efficiency Enhancement of Diffusion Models 中文标题&#xff1a;扩散模型的注意力驱动的训练免费效率增强 简介&#xff1a;扩散模型在生成高质量和多样化图像方面取得了出色的表现,但其卓越性能是以昂贵的架构设计为代价的,特别是广泛使…

React Native 之 原生组件和核心组件(二)

原生组件 在 Android 开发中是使用 Kotlin 或 Java 来编写视图&#xff1b;在 iOS 开发中是使用 Swift 或 Objective-C 来编写视图。在 React Native 中&#xff0c;则使用 React 组件通过 JavaScript 来调用这些视图。在运行时&#xff0c;React Native 为这些组件创建相应的 …

ms17-010(永恒之蓝)

1.漏洞介绍: 永恒之蓝&#xff08;ms17-010&#xff09;爆发于2017年4月14日晚&#xff0c;是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限&#xff0c;以此来控制被入侵的计算机。甚至于2017年5月12日&#xff0c; 不法分子通过改造“永恒之蓝”制作了wannacry勒索病…

MobileNet 网络详解

一、了解 网络亮点&#xff1a; 1、DW网络&#xff0c;大大减少运算量和参数数量 2、增加超参数&#xff1a;控制卷积层卷积核个数的超参数 &#xff0c;控制图像输入大小的超参数 &#xff0c;这两个超参数是人为设定的&#xff0c;不是机器学习到的。 二、DW卷积&#xff…

黑马甄选离线数仓项目day02(数据采集)

datax介绍 官网&#xff1a; https://github.com/alibaba/DataX/blob/master/introduction.md DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。 DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre…

4.分支与循环

逻辑控制分为三部分&#xff1a; 1.顺序结构---》顺序执行代码 2.分支结构---》if语句和switch语句 3.循环执行---》for语句 while语句 和do while语句 顺序结构比较简单&#xff0c;按照代码书写的顺序一行一行执行 分支结构&#xff08;if、switch语句&#xff09; 也就是…