02-2.3.5 静态链表

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻
此外,《程序员必备技能》专栏和《程序员必备工具》专栏(该专栏暂未开设)日后会逐步更新,感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏

什么是静态链表

  • 单链表:各个结点在内存中星罗棋布、散落天涯;每个结点存放一个数据元素,和一个指向下一个结点指针
  • 静态链表:分配一整片连续的内存空间,各个结点集中安置;每个结点包含一个数据元素和下一个结点的数组下标(游标)
    在静态链表中,0号结点充当了头结点的角色,也就是说这个结点中是不存放数据元素的,而头结点的下一个结点,存放在数组下标为2的这个位置。
索引数据元素(data)指针(next)
02
1 e 2 e_2 e24
2 e 1 e_1 e11
3 e 4 e_4 e46
4 e 3 e_3 e3-1
5
6 e 5 e_5 e50

在这个静态链表中
头结点的指针是2,指向索引为2的结点,也就是 e 1 e_1 e1
e 1 e_1 e1的指针是1,指向索引为1的结点,也就是 e 2 e_2 e2
e 2 e_2 e2的指针是4,指向 e 3 e_3 e3
e 3 e_3 e3的指针是-1,表示静态链表的结束

如何定义一个静态链表

用代码定义一个静态链表:

#define MaxSize 10   //静态链表的最大长度
struct Node{         //静态链表结构类型的定义ElemType data;   //存储数据元素int next;        //下一个元素的数组下标
};void testSLinkList(){struct Node a[MaxSize];  //数组a作为静态链表//......
}

课本上还给了一种定义的方式:

#define MaxSize 10
typedef struct{ElemType data;int next;
}SLinkList[MaxSize];

其实这种方式和下面的方式等价:

#define MaxSize 10
struct Node{ElemType data;int next;
};
typedef struct Node SLinkList[MaxSize];//定义方法 1
void testSLinkList(){SLinkList a;//......
}
//定义方法 2
void testSLinkList(){struct Node a[MaxSize];//......
}
/*
* 定义方法1 和 定义方法2 是等价的
* 那么为什么课本要使用上面那种方法定义静态链表呢?
* 因为下面这种定义方式
* 会让我们看起来像是定义了一个Node型的数组而不是链表
* 而用SLinkList,一看就知道是静态链表
*/

简述基本操作的实现

初始化静态链表:
1. 把a[0]next设为-1
2. 把其他结点的next设为一个特殊值用来表示结点空闲,如-2
查找:
从头结点出发挨个往后遍历结点
直到找到想要的数据元素
时间复杂度: O ( n ) O(n) O(n)
插入位序为i的结点:
1. 找到空的结点,存入数据元素
2. 从头结点出发,找到位序为i-1的结点
3. 修改新结点的next
4. 修改i-1号结点的next
删除结点:
1. 从头结点出发找到前驱结点
2. 修改前驱结点的游标
3. 被删除结点的next设为-2

静态链表这一部分考试中很少考察,代码实现更是如此
总结
静态链表就是用数组的方式来实现的链表
逻辑上相邻的元素,也可以在物理上不相邻
各个元素之间的关系是通过游标来表示的
优点增、删操作不需要大量移动元素
缺点:不能随机存取,只能从头结点开始依次往后查找;容量固定不可变
适用场景

  1. 不支持指针的低级语言
  2. 数据元素数量固定不变的场景(如操作系统的文件分配表FAT)

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

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

相关文章

中国自动气象站:现代气象观测的中流砥柱

引言 气象观测是人类认识和预报天气的重要手段。在现代科技的推动下,自动气象站成为气象观测的重要工具,为天气预报、防灾减灾和气候研究提供了宝贵的数据支持。本文将介绍中国自动气象站的发展历程、技术特点及其在气象观测中的重要作用。 中国自动气象…

关于远程销售的电子课程开发

一家国际网络安全公司委托我们开发用于培训销售代表远程和电话销售的互动电子内容。我们在 Articulate Storyline 中创建了情节脚本和二维动画,以解释关键概念和销售技巧。互动元素使学习者可以按照自己的节奏进行学习,而我们的动画插图则使材料生动起来…

【成都信息工程大学】只考程序设计!成都信息工程大学计算机考研考情分析!

成都信息工程大学(Chengdu University of Information Technology),简称“成信大”,由中国气象局和四川省人民政府共建,入选中国首批“卓越工程师教育培养计划”、“2011计划”、“中西部高校基础能力建设工程”、四川…

运维系列.Linux下的用户管理

运维系列 Linux下的用户管理 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/ar…

LabVIEW FPGA开发NI sbRIO-9607高精度数字滤波器

使用NI sbRIO-9607硬件平台,通过LabVIEW FPGA模块实现一个高精度数字滤波器。该应用不需要额外的实时操作系统 (RT),所有控制与数据处理均在sbRIO-9607的FPGA上完成,充分利用其并行处理能力,实现低延迟、高性能的数据滤波。这种滤…

最新 Navicat Data Modeler 4 | 产品介绍

在过去的几周里,我们已经介绍了 Navicat 版本 17,现在我们来把注意力转移到另外两个值得关注的产品上,即 Navicat Data Modeler 和 Navicat BI(之前称为 Navicat Chart Creator)。今天的博客将介绍 Navicat Data Model…

AI Agent:人类工作范式的颠覆者还是人机协作新范式?

编者按: 当前大热的大语言模型和检索增强生成模型,虽然在语言理解和内容生成方面取得了突破性的进展,但仍然存在诸多限制。它们缺乏根据目标导引行为、持续学习和与环境交互的能力,难以应对复杂多变的现实场景需求。 今天为大家带…

代理IP科普:IP黑名单与IP白名单的机制与作用

在IP代理使用中,我们经常听到黑名单与白名单两个名词,它们不仅提供了强大的防御机制,还可以灵活应对不同的安全威胁。本文将详细探讨IP黑名单和白名单在网络安全中的双重屏障作用。 一、IP黑名单和白名单定义 IP黑名单与IP白名单是网络安全中…

事务管理AOP

通过事务操作 删除部门的时候,同时删除员工,那么如果其中有异常,那么就进行事务回滚 使用注解Trance Transactional-propagation(传播行为)

基于协同过滤算法的东北特产销售系统的设计

基于协同过滤算法的东北特产销售系统的设计 管理员账户功能包括:系统首页,个人中心,管理员管理,基础数据管理,公告管理,新闻信息管理,商品管理 农户账户功能包括:系统首页&#xf…

vue3学习(七)

前言 接上一篇学习笔记,今天主要是分享上次学习完了,还没来得及记录,趁今天晚上换换脑子的时间记录下。 今天主要是记录的vuex文件的拆分,因为毕竟如果只在一个index.js文件写,文件会随着业务的复杂性上升&…

从0-1实现大模型

目录 输入数据准备 滑动窗口造数据 Data sampling with a sliding window 数据加载器的输出DataLoader 位置编码Encoding word positions 自注意力机制 点积的原理 QKV的原理 实现代码 Multi-head Attention 线性层 github: LLMs-from-scratch/ch02/01_main-chapte…

MySQL之查询性能优化(六)

查询性能优化 查询优化器 9.等值传播 如果两个列的值通过等式关联,那么MySQL能够把其中一个列的WHERE条件传递到另一列上。例如,我们看下面的查询: mysql> SELECT film.film_id FROM film-> INNER JOIN film_actor USING(film_id)-> WHERE f…

四川汇聚荣聚荣科技有限公司综合实力怎么样?

在科技日新月异的今天,企业的综合实力成为衡量其市场竞争力的重要指标。四川汇聚荣聚荣科技有限公司作为一家在行业内具有一定影响力的企业,其综合实力如何,自然成为外界关注的焦点。以下将从多个维度深入分析该公司的实力。 一、公司概况与核…

排序---快速排序

前言 个人小记 一、代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_ARR 100000 #define swap(a,b)\ {\__typeof(a) __ca;\ab,b__c;\ } #define TEST(func ,arr,l,r)\ {\int nr-l;\printf("tes…

Blender + Marvelous Designer(MD)服装,Quad Remesher四边面拓扑布线、UV投射

Blender Marvelous Designer&#xff08;MD&#xff09;服装&#xff0c;Quad Remesher四边面拓扑布线、UV投射_哔哩哔哩_bilibili BlenderMD服装&#xff0c;Quad Remesher四边面拓扑和UV投射 - 哔哩哔哩 https://i0.hdslb.com/bfs/article/b3f270cb02bb6de5cc080d732dc8…

模型测试优化

针对怼螺丝孔场景交叉测试 文章目录 修改一&#xff1a;修改二&#xff1a; 基于训练场景&#xff0c;进行修改&#xff0c;用以验证泛化性 模型说明&#xff1a;训练所用的物体模型上&#xff0c;有两个孔位&#xff0c;其中左侧为1号孔位&#xff0c;右侧为2号孔位 现状&…

QtCharts使用

1.基础配置 1.QGraphicsView提升为QChartView#include <QtCharts> QT_CHARTS_USE_NAMESPACE #include "ui_widget.h"2. QT charts 2.柱状图 2.1QBarSeries //1.创建Qchart对象QChart *chart new QChart();chart->setTitle("直方图演示");//设…

数据结构复习指导之归并排序、基数排序、计数排序

目录 1.归并排序 1.1二路归并操作的功能 1.2算法思想 1.3代码分析 1.4性能分析 2.基数排序 2.1算法思想 2.2基数排序的中间过程的分析 2.3性能分析 3.计数排序 3.1算法思想 3.2代码分析 3.3性能分析 知识回顾 1.归并排序 1.1二路归并操作的功能 归并排序与上述基…

【前端每日基础】day39——v-if 和 v-for优先级

Vue.js 中&#xff0c;v-if 和 v-for 是两个常用的指令&#xff0c;用于条件渲染和列表渲染。它们的优先级是一个重要的概念&#xff0c;因为在某些情况下&#xff0c;这两个指令可能会同时应用在同一个元素上。 v-if 和 v-for 的优先级 v-for 的优先级高于 v-if&#xff1a; …