Day03 链表概念与单向不循环链表的实现

目录

1、顺序表的优缺点

2、链式存储的线性表

3、单向不循环链表实现


1、顺序表的优缺点

顺序表的优点是:

        由于顺序表数据元素的内存地址都是连续的,所以可以实现随机访问,而且不需要多余的信息来描述相关的数据,所以存储密度高。

顺序表的缺点是:

        顺序表的数据在进行增删的时候,需要移动成片的内存,另外,当数据元素的数量较多的时候,需要申请一块较大的连续的内存,同时当数据元素的数量的改变比较剧烈,顺序表不灵活。

2、链式存储的线性表

        链式存储指的是采用离散的内存单元来存储数据元素,用户需要使用某种方式把所有的数据元素连接起来,这样就可以变为链式线性表,简称为链表,链表可以高效的使用碎片化内存。

顺序表和链式表的区别:顺序表使用连续的内存,链式表使用离散的内存空间。

链表中的每个数据元素的地址是不固定的,所以每个数据元素都应该使用一个指针指向直接后继的内存地址,当然最后一个数据元素没有直接后继,所以最后一个数据元素指向NULL即可,作为用户只需要知道第一个数据元素的内存地址,就可以访问后继元素了。

        链式存储,则线性表中每一个数据元素除了存储自身数据之外,还需要额外存储直接后继的地址,所以链表中的每一个数据元素都是由两部分组成:存储自身数据的部分被称为数据域,存储直接后继地址的部分被称为指针域,数据域和指针域组成的数据元素被称为结点(Node)。

链表中的数据元素=数据域+指针域

根据链表的结点的指针域的数量以及根据链表的首尾是否相连,把链式线性表分为以下几种:

  • 单向链表
  • 单向循环链表
  • 双向链表
  • 双向循环链表
  • 内核链表

这几种链表的使用规则差不多,只不过指针域数量不同。

3、单向不循环链表实现

/******************************************************** @file:LinkedList.c* @brief:单向不循环链表封装* @author:demon_xing2024@163.com* @date:2024/06/15* @version:V1.0* @attention:*          头节点不存放数据*          链表中所有节点的指针域都指向下一个节点*          链表中最后一个节点的指针域指向NULL*          链表中所有节点是动态分配内存的*          链表中所有节点的数据域类型是相同的* @history*        Date        Version    Author            Notes*      2024-6-15      0.0.1    demon_xing    first version* Copyright (c) 2024, demon_xing2024@163.com  All Rights Reserved.* *******************************************************//****************************************************************** @brief:头文件**********************************

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

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

相关文章

常用的JDK调优监控工具整理

JVM 调优首先要做的就是监控 JVM 的运行状态,这就需要用到各种官方和第三方的工具包了 一、 JDK 工具包 JDK 自带的 JVM 工具可以分为命令行工具和可视化工具 命令行工具 jps: JVM Process status tool:JVM进程状态工具,查看进程基本信息j…

Spring Aop及事务管理

5 Spring AOP AOP概述 AOP:全称是 Aspect Oriented Programming 即:面向切面编程。简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有…

SpringMVC框架学习笔记(七):处理 json 和 HttpMessageConverter 以及文件的下载和上传

1 处理 JSON-ResponseBody 说明: 项目开发中,我们往往需要服务器返回的数据格式是按照 json 来返回的 下面通过一个案例来演示SpringMVC 是如何处理的 (1) 在web/WEB-INF/lib 目录下引入处理 json 需要的 jar 包,注意 spring5.x…

OpenCV练习(1)签名修复

1.目的 在学校的学习过程中,需要递交许多材料,且每份材料上都需要对应负责人签名,有时候找别人要签名,然后自己粘贴的话,会出现签名模糊,背景不是纯白透明。为此以word中的“颜色校正”功能为参照&#xf…

基于iBeacon蓝牙定位技术的反向寻车系统

随着城市化进程的加速和汽车保有量的不断增加,大型停车场成为了人们日常生活中不可或缺的一部分。然而,在繁忙的停车场中快速找到自己的车辆,成为了许多车主的难题。为了解决这一问题,维小帮基于iBeacon蓝牙技术打造的反向寻车系统…

Linux 编写脚本自动清理旧的日志文件,释放磁盘空间

摘要:在我们的后端中每天会产生大量的日志,如果不定期清理会导致系统异常,本文讲解编写一个脚本根据日志文件的修改时间来清理日志,而无需理会日志的命名,从而使脚本更通用。 创建脚本文件: cd /data/shell vi clean_logs.sh此时进入到vi编辑器,在编辑器输入以下内容:…

Android开发AndroidStudio安装教程

本文图示展示AndroidStudio安装教程。 目录 一、下载安装包 二、安装 一、下载安装包 https://developer.android.google.cn/studio?hlzh-cn 二、安装 双击exe Next Next Next 默认点击Install Next 点击finish进入设置文件界面。 如果本地有设置文件,选择C…

推荐一款可以下载B站视频和音频的工具

cobalt是一个免费的下载网站,主要是用于载视频和音频。只要你把相应的网址复制下来,然后打开cobalt网站,黏贴网址,选择要下载的格式,就可以下载相应的音频或者视频了。 该网站非常简洁,使用也很简单。目前只…

【机器学习】Dify:AI智能体开发平台版本升级

一、引言 关于dify,之前力推过,大家可以跳转 AI智能体研发之路-工程篇(二):Dify智能体开发平台一键部署了解,今天主要以dify为例,分享一下如何进行版本升级。 二、版本升级 2.1 原方案 #首次…

大模型与知识智能:心理疾病治疗的新希望

前言 随着社会的发展,心理疾病已成为一个日益突出的问题。据《柳叶刀》杂志的系统性综述显示,疫情之后,全世界抑郁症与焦虑症的患病率上升超过25%,其中青少年心理健康的影响最大。此外,2021年国内的精神障碍报告显示&…

光照药物稳定性试验箱百科

概念与作用 - 药品稳定性试验箱:一种精密设备,用于模拟药品在不同环境条件下的存储情况。 - 环境模拟:通过控制温度、湿度等参数,复制各种实际储存条件,以测试药品稳定性。 - 保障药品质量:通过试验&…

Python 3 列表

Python 3 列表 Python 3 中的列表是一种基本的数据结构,用于存储一系列有序的元素。列表是可变的,这意味着可以修改其内容。在 Python 中,列表是非常灵活和强大的,广泛用于各种编程任务。 创建列表 创建列表非常简单,只需将元素用逗号分隔,并包围在方括号 [] 内。例如…

lua中的lfs库介绍

lua中的lfs库介绍 说明常用函数解析lfs.attributeslfs.chdirlfs.currentdirlfs.dirlfs.mkdirlfs.rmdirlfs.locklfs.touchlfs.linklfs.setmodelfs.symlinkattributes 说明 lfs是lua中的一个文件系统库,提供了更多高级的文件和目录操作功能,使得lua可以更方…

如何在 Doris 中通过外表访问 OceanBase 表

在OceanBase 中建立了一张表 test.t1: CREATE TABLE t1 (apply_id varchar(500) DEFAULT NULL,apply_dt date DEFAULT NULL,mobile_prov_nm varchar(500) DEFAULT NULL,mobile_city_nm varchar(500) DEFAULT NULL );-- 插入 10000 行数据到 t1 表insert /*parallel…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第九周) - 可解释性

可解释性 1. NLP中的可解释性 1.1. 局部解释1.2. 文本解释1.3. 模型探测 2. 标注伪影3. 思维链 1. NLP中的可解释性 在自然语言处理领域,可解释性是指理解和揭示NLP模型如何做出决策的能力。一些模型本身是自然透明的,我们可以理解它们为何做出这样的决…

Kafka 如何保证消息顺序及其实现示例

Kafka 如何保证消息顺序及其实现示例 Kafka 保证消息顺序的机制主要依赖于分区(Partition)的概念。在 Kafka 中,消息的顺序保证是以分区为单位的。下面是 Kafka 如何保证消息顺序的详细解释: ⭕分区内消息顺序 顺序写入&#…

windows 共享给linux 的使用方法

windows 作为服务器,linux作为客户端进行文件共享,有3种方法:samba nfs(网络硬盘)虚拟机共享(VirtualBox vboxsf)。 Samba 共享: 打开【控制面板】-->【启动或关闭windows功能】…

Apache Tomcat介绍

目录 前言 一、Apache Tomcat的历史 二、核心特性与组件 三、Tomcat-基本使用 总结 前言 在Java Web开发领域,Apache Tomcat是一个不可或缺的核心组件。作为一个轻量级的开源Web应用服务器,Tomcat提供了一种简单而高效的方式来部署和管理Java Servle…

C语言:头歌利用指针找最大值

任务描述 本关任务:本题要求实现一个简单函数,找出两个数中的最大值。 函数接口定义: void findmax( int *px, int *py, int *pmax ); 其中px和py是用户传入的两个整数的指针。函数findmax应找出两个指针所指向的整数中的最大值&#xff0c…

【Python入门与进阶】Python的分支结构

Python 的分支结构主要是通过 if、elif 和 else 语句来实现的。这些语句允许程序根据不同的条件执行不同的代码块。以下是一个简单的示例来展示 Python 分支结构的基本用法: # 示例变量 x 10# if 语句 if x > 0:print("x 是一个正数")# if-else 语句…