数据结构 1-2 线性表的链式存储-链表
1 原理
顺序表的缺点:
- 插入和删除移动大量元素
- 数组的大小不好控制
- 占用一大段连续的存储空间,造成很多碎片
链表规避了上述顺序表缺点

逻辑上相邻的两个元素在物理位置上不相邻

头结点
L:头指针

头指针:链表中第一个结点的存储位置,用来标识单链表。
头结点:在单链表第一个结点之前附加的一个结点,为了操作上的方便。
若链表有头结点,则头指针永远指向头结点,不论链表是否为空,头指针均不为空,头指针是链表的必须元素,他标识一个链表。头结点是为了操作的方便而设立的,其数据域一般为空,或者存放链表的长度。有头结点后,对在第一结点前插入和删除第一结点的操作就统一了,不需要频繁 重置头指针。但头结点不是必须的。
优缺点
优点:
- 插入和删除操作不需要移动元素,只需要修改指针
- 不需要大量的连续存储空间
缺点:
- 单链表附加指针域,也存在浪费存储空间的缺点
- 查找操作时需要从表头开始遍历,依次查找,不能随机存取
2 表示
2.1 定义
typedef int ElemType ;typedef struct LNode{ //单链表结点类型ElemType data; //数据域struct LNode* next;//指针域
}LNode, *LinkList;
2.2 新建链表
2.2.1 头插法新建链表

void list_head_insert(LinkList &L)
{ElemType x;LNode *s;L= (LinkList)malloc(sizeof(LNode));//申请头节点空间L->next = NULL;scanf("%d",&x);while(x!=9999){s= (LinkList)malloc(sizeof(LNode));//申请节点空间s->data = x;s->next = L->next;//指向原本第一个节点L->next = s; //头结点的nextscanf("%d",&x);}
}
2.2.2 尾插法新建链表

void list_tail_insert(LinkList &L)
{L= (LinkList)malloc(sizeof(LNode));//申请头节点空间ElemType x;LNode *s, *r = L;//s是用来指向新节点,r始终指向链表尾部L->next = NULL;scanf("%d", &x);while(x!=9999){s = (LinkList) malloc(sizeof(LNode));s->data=x;r->next = s;r=s;scanf("%d", &x);}r->next=NULL;//让为节点的next=NULL}
2.3 打印链表
void print_list(LinkList L)
{L = L->next;while(L != NULL){printf("%3d",L->data);L =L->next;}printf("\n");
}
2.4 查找
2.4.1 按位置查找
头节点代表第0个位置

//按位置查找
LinkList GetElem(LinkList L, int SearchPos)
{int i = 0;if(SearchPos < 0){return NULL;}while(L && i < SearchPos){L = L->next;i++;}return L;
}
2.4.2 按值查找

//按值 查找
LinkList LocateElem(LinkList L, ElemType SearchVal)
{while(L){if(L->data ==SearchVal){return L;}else{L =L->next;}}return NULL;}
2.5 插入

插入情况

bool ListFrontInsert(LinkList L, int InsertPose, ElemType InsertValue)
{LinkList p = GetElem(L, InsertPose-1);if(p == NULL){return false;}LinkList q ;q =(LinkList)malloc(sizeof(LNode));q->data = InsertValue;q->next = p->next;p->next = q;return true;}
2.6 删除
删除注意的点:
- 需要释放删除节点的空间
- 需要判断删除的位置是否存在
void dele_elem(ListLink L, int pos) {if (pos <0) {return ;}ListLink r,q; //q用来存储要删除的节点r = find_elem(L, pos -1);if (NULL == r) {return;}q=r->next;if (q==NULL){return;}r->next = q->next;//断链free(q);q = NULL;//防止野指针
}
引用:要不要对变量进行赋值,如果不用不加引用,若要加引用
相关文章:
数据结构 1-2 线性表的链式存储-链表
1 原理 顺序表的缺点: 插入和删除移动大量元素数组的大小不好控制占用一大段连续的存储空间,造成很多碎片 链表规避了上述顺序表缺点 逻辑上相邻的两个元素在物理位置上不相邻 头结点 L:头指针 头指针:链表中第一个结点的存储…...
ArcGIS Pro进行坡度与坡向分析
在地理信息系统中,坡度分析是一项至关重要的空间分析方法,旨在精确计算地表或地形的坡度,为地形特征识别、土地资源规划、环境保护、灾害预警等领域提供科学依据。本文将详细介绍如何利用ArcGIS Pro这一强大的地理信息系统软件,进…...
My first Android application
界面元素组成: 功能代码: /*实现功能:当输入内容后,欢迎文本发生相应改变,并清除掉文本域内容当未输入任何内容时,弹出提示文本以警告用户*/val greetingText findViewById<TextView>(R.id.printer)…...
ZLMediaKi集群设置
要在集群环境中部署 ZLMediaKit,您可以按照以下步骤进行操作。ZLMediaKit 是一个高性能的流媒体服务器,支持 RTMP、RTSP、HLS 等协议。以下是一个详细的集群部署方案: ### 1. 环境准备 - **服务器**:准备多台服务器,…...
Docker基础实践与应用举例
Docker 是一个轻量级容器化平台,通过将应用及其依赖打包到容器中,实现快速部署和环境一致性。以下是 Docker 的实践与应用场景举例,结合具体操作步骤: 一、基础实践 1. 快速启动一个容器 # 运行一个Nginx容器,映射宿…...
Innovus中快速获取timing path逻辑深度的golden脚本
在实际项目中我们经常会遇到一条timing path级数特别多,可能是一两页都翻不完。此时,我们大都需要手工去数这条path上到底有哪些是设计本身的逻辑,哪些是PR工具插入的buffer和inverter。 数字IC后端手把手培训教程 | Clock Gating相关clock …...
百度AI图片助手,免费AI去水印、画质修复、画面延展以及局部替换
最近,要是你常用百度图片,可能已经发现了它新添的一个超实用功能——百度AI图片助手。但很多朋友不知道它的入口地址,我们今天给大家分享一下。 这个功能的出现,在图片编辑修改方面带来了极大便利,它涵盖了AI去水印、…...
【前端】Axios AJAX Fetch
不定期更新,建议关注收藏点赞。 目录 AxiosAJAXCORS 允许跨域请求 Fetch Axios axios 是一个基于 Promise 的 JavaScript HTTP 客户端,用于浏览器和 Node.js 中发送 HTTP 请求。它提供了一个简单的 API 来发起请求,并处理请求的结果。axios …...
测试面试题:以一个登录窗口为例,设计一下登录界面测试的思路和方法
在测试登录窗口时,可以从 表单测试、 逻辑判断和 业务流程三个方面设计测试思路和方法。以下是一个详细的测试方案: 1. 表单测试 表单测试主要关注输入框、按钮等UI元素的正确性和用户体验。 测试点: 输入框测试 用户名和密码输入框是否正常显示。输入框是否支持预期的字符类…...
Android之图片保存相册及分享图片
文章目录 前言一、效果图二、实现步骤1.引入依赖库2.二维码生成3.布局转图片保存或者分享 总结 前言 其实现在很多分享都是我们自定义的,更多的是在界面加了很多东西,然后把整个界面转成图片保存相册和分享,而且现在分享都不需要第三方&…...
EX_25/2/24
写一个三角形类,拥有私有成员 a,b,c 三条边 写好构造函数初始化 abc 以及 abc 的set get 接口 再写一个等腰三角形类,继承自三角形类 1:写好构造函数,初始化三条边 2:要求无论如何,等腰三角形类对象&#x…...
ElasticSearch公共方法封装
业务场景 1、RestClientBuilder初始化(同时支持单机与集群) 2、发送ES查询请求公共方法封装(支持sql、kql、代理访问、集群访问、鉴权支持) 3、判断ES索引是否存在(/_cat/indices/${indexName}) 4、判断ES…...
JVM之JVM的组成
Java 虚拟机(JVM)是 Java 程序的运行核心,它主要由类加载系统、运行时数据区、执行引擎和本地方法接口这几个关键部分组成。 类加载系统(Class Loading System) 类加载系统负责在程序运行时动态地将 Java 类加载到 J…...
贪心算法
int a[1000], b5, c8; swap(b, c); // 交换操作 memset(a, 0, sizeof(a)); // 初始化为0或-1 引导问题 为一个小老鼠准备了M磅的猫粮,准备去和看守仓库的猫做交易,因为仓库里有小老鼠喜欢吃的五香豆,第i个房间有J[i] 磅的五香豆…...
Linux下安装中文输入法总结
Linux下安装中文输入法总结_linux 微软拼音-CSDN博客文章浏览阅读4.2w次,点赞21次,收藏92次。众所周知,fcitx和ibus是两款很好用的Linux中文输入法框架。下面来说一下其安装方法以及会踩的坑。首先fcitx和ibus是不能共存的,两者只…...
人工智能(AI):科技新纪元的领航者
摘要 人工智能(AI)作为当今科技领域最具变革性的力量之一,正以惊人的速度重塑着我们的世界。本文旨在全面且专业地介绍人工智能,涵盖其定义、发展历程、关键技术、应用领域、面临的挑战以及未来展望等方面,以期为读者…...
c3p0、Druid连接池+工具类 Apache-DbUtils (详解!!!)
数据库连接池是在应用程序启动时创建一定数量的数据库连接,并将这些连接存储在池中。当应用程序需要与数据库通信时,它可以向池中请求一个连接,使用完后将连接归还给池,而不是关闭连接。这样可以减少创建和关闭连接的开销…...
鸿蒙开发深入浅出03(封装通用LazyForEach实现懒加载)
鸿蒙开发深入浅出03(封装通用LazyForEach实现懒加载) 1、效果展示2、ets/models/BasicDataSource.ets3、ets/models/HomeData.ets4、ets/api/home.ets5、ets/pages/Home.ets6、ets/views/Home/SwiperLayout.ets7、后端代码 1、效果展示 2、ets/models/Ba…...
AWS - Redshift - 外部表读取 Parquet 文件中 timestamp 类型的数据
问题: 通过 Redshift Spectrum 功能可以读取 S3 中的文件,当读取 Parquet 文件时,如果列格式设置为 timestamp, 通过 psql 客户端读取会出现以下错误: testdb# select * from myspectrum_schema_0219.test_ns; ERROR…...
Ubuntu20.04之VNC的安装使用与常见问题
Ubuntu20.04之VNC的安装与使用 安装图形桌面选择安装gnome桌面选择安装xface桌面 VNC-Server安装配置开机自启 VNC Clientroot用户无法登入问题临时方案永久方案 安装图形桌面 Ubuntu20.04主流的图形桌面有gnome和xface两种,两种桌面的安装方式我都会写,…...
5分钟掌握Nexus Mods App:告别模组冲突的终极解决方案
5分钟掌握Nexus Mods App:告别模组冲突的终极解决方案 【免费下载链接】NexusMods.App Home of the development of the Nexus Mods App 项目地址: https://gitcode.com/gh_mirrors/ne/NexusMods.App 还在为模组冲突、依赖缺失而烦恼吗?Nexus Mod…...
前端设计模式(观察者、单例等)应用场景
前端设计模式是构建可维护、可扩展代码的关键工具。观察者模式实现松耦合通信,单例模式确保全局唯一实例,策略模式封装算法族,工厂模式解耦对象创建。这些模式在前端开发中广泛应用,能显著提升代码质量和开发效率。下面从几个典型…...
物联网LoRa系列-18:Sx1262射频信号放大器与电源管理的协同设计
1. Sx1262射频信号放大器的核心作用 第一次拿到Sx1262芯片规格书时,我被它内部集成的射频信号放大器惊艳到了。这个火柴盒大小的芯片里,竟然藏着能推动500米无线通信的"能量引擎"。功率放大器(PA)和低噪声放大器&#…...
通义千问2.5-0.5B-Instruct成本效益:千元设备运行大模型
通义千问2.5-0.5B-Instruct成本效益:千元设备运行大模型 1. 为什么小模型也能有大作为 你可能听说过那些动辄几百亿参数的大模型,觉得AI离普通人很遥远。但今天要介绍的通义千问2.5-0.5B-Instruct,彻底打破了这种认知。 这个模型只有5亿参…...
如何安全更新gumbo-parser依赖:避免兼容性问题的终极指南
如何安全更新gumbo-parser依赖:避免兼容性问题的终极指南 【免费下载链接】gumbo-parser An HTML5 parsing library in pure C99 项目地址: https://gitcode.com/gh_mirrors/gum/gumbo-parser gumbo-parser是一个纯C99编写的HTML5解析库,版本号为…...
UnityStandaloneFileBrowser快速入门:5分钟学会使用原生文件选择器
UnityStandaloneFileBrowser快速入门:5分钟学会使用原生文件选择器 【免费下载链接】UnityStandaloneFileBrowser A native file browser for unity standalone platforms 项目地址: https://gitcode.com/gh_mirrors/un/UnityStandaloneFileBrowser UnitySta…...
DeepBlueCLI高级配置:自定义正则表达式与安全名单优化
DeepBlueCLI高级配置:自定义正则表达式与安全名单优化 【免费下载链接】DeepBlueCLI 项目地址: https://gitcode.com/gh_mirrors/de/DeepBlueCLI DeepBlueCLI是一款功能强大的事件日志分析工具,能够帮助安全分析师快速识别系统中的可疑活动。通过…...
Windows Cleaner:系统优化工具的技术哲学与实践
Windows Cleaner:系统优化工具的技术哲学与实践 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 当C盘空间告急的红色警告成为数字生活的日常ÿ…...
26-4-17 数据结构作业:用栈解决迷宫问题
1.问题描述 已知一个 66 的迷宫,可将其视作在一个坐标系中,令起点 (1,1),终点 (4,4),墙:1、路:0,要求用队列实现最短路径搜索。 2.算法思路 题目要求使用队列(先进先出)…...
从数据到地图:Arcgis等值线图实战避坑指南
1. 数据准备:从源头避开第一个坑 等值线图的核心是数据,但很多人往往在第一步就栽了跟头。我见过太多人拿着格式混乱的Excel表格直接导入Arcgis,结果系统报错时还一头雾水。这里分享几个我踩过的数据坑: 字段命名陷阱:…...
