数据结构:线性表
1、线性表概述
1.1线性表的定义
线性表(list):零个或多个数据元素的有限序列。
简单地来说,我们可以用下面这张图来描述一个线性表:

1.2 线性表的存储结构
1.2.1顺序存储结构——顺序表
顺序表是将数据全部存储到一整块内存空间中,数据元素之间按照次序挨个存放。

1.2.2链式存储结构——链表
链表不强制要求数据在内存中集中存放,各个元素可以分散存放在内存中。

2、顺序表
2.1顺序表的定义
接下来我们用代码进行描述:
#define LIST_MAX_NUM 100
typedef struct
{int list[LIST_MAX_NUM];int len;
}Linear_List_Type;Linear_List_Type mylist;
这段代码定义了一个结构体类型 Linear_List_Type,并创建了一个该类型的变量 mylist。
代码解析:
-
typedef struct { ... } Linear_List_Type;:这行代码定义了一个结构体,并使用typedef为该结构体起了一个别名Linear_List_Type。这意味着在以后使用Linear_List_Type这个名字就代表了这个结构体类型。 -
int list[LIST_MAX_NUM];:这是一个整数数组,数组的长度是LIST_MAX_NUM,这个宏应该在其他地方定义过,用来表示数组的最大长度。 -
int len;:这是一个整数变量,用来存储数组中当前有效元素的数量,也就是线性表的长度。 -
Linear_List_Type mylist;:这行代码定义了一个名为mylist的变量,类型是Linear_List_Type,也就是前面定义的结构体类型。mylist代表一个具体的线性表实例。
2.2顺序表的基本操作
2.2.1初始化
初始化操作的意义:
- 该函数将传入的线性表的长度
len设置为 0,从而将线性表重置为空状态。 - 在数据结构中,初始化操作是确保线性表在使用之前处于一个已知的、正确的状态。这通常是使用线性表的第一步操作。
void InitList(Linear_List_Type* p)
{p->len = 0;
}
代码解析:
-
函数声明
void InitList(Linear_List_Type* p):void:表示该函数没有返回值。InitList:函数名称,用于初始化线性表。Linear_List_Type* p:函数的参数是一个指向Linear_List_Type类型的指针p。这个指针用于指向需要初始化的线性表。
-
p->len = 0;:p->len:通过指针p访问线性表结构体中的len成员。=:赋值运算符。0:将len设置为 0。- 这一步将线性表的长度初始化为 0,表示线性表为空,没有有效元素。
2.2.2插入
假设线性表的存储空间为V[1:m],表长为n,插入位置i,插入元素b,则代码如下:
void InsertList(Linear_List_Type* p, int m, int i, int b)
{int k;if (p->len == m){printf("overflow");return;}if (i > p->len){i = p->len + 1;}else if (i < 1){i = 1;}for (k = p->len; k >= i; k--){p->list[k] = p->list[k - 1];}p->list[i - 1] = b;p->len += 1;
}
-
参数说明:
- 线性表的指针用于操作目标线性表。
- 参数包括线性表的最大容量、插入位置、以及要插入的元素。
-
判断线性表是否已满:
- 首先检查线性表当前长度是否已达最大容量,如果已满,打印“overflow”提示并退出函数,防止溢出错误。
-
调整插入位置:
- 检查插入位置是否超出当前长度,如果插入位置大于当前长度,将位置调整为表的末尾。
- 如果插入位置小于 1,则将插入位置调整为第一个位置。
-
移动元素腾出插入空间:
- 从线性表的最后一个元素开始,逐个向后移动元素,为插入新元素腾出空间。
-
插入新元素:
- 将新元素插入到调整好的位置。
-
更新线性表长度:
- 插入后,更新线性表的长度以反映新的元素数量。
2.2.3删除
void DeleteList(Linear_List_Type* p, int i)
{int k;if (p->len == 0){printf("underflow");return;}if (i<1 || i>p->len){printf("this element is not in the list");return;}for (k = i; k < p->len; k++){p->list[k - 1] = p->list[k];}p->len -= 1;return;
}
步骤解析:
-
函数定义与参数说明:
Linear_List_Type* p:指向线性表的指针,操作的目标是这个线性表。int i:表示要删除的元素的位置,从 1 开始计数。
-
检查线性表是否为空:
if (p->len == 0):判断线性表是否为空,即当前长度是否为 0。- 如果线性表为空,则打印
"underflow"提示,表示删除操作无法进行,并立即返回。
-
检查删除位置是否有效:
if (i < 1 || i > p->len):判断插入位置是否超出有效范围。- 如果
i小于 1 或大于当前线性表的长度,说明删除位置无效。 - 打印
"this element is not in the list"提示,并退出函数。
- 如果
-
移动元素填补空位:
for (k = i; k < p->len; k++):从删除位置i开始,将其后的元素依次向前移动。p->list[k - 1] = p->list[k];:将第k位置的元素移动到k-1位置,逐步覆盖被删除的元素位置。
-
更新线性表的长度:
p->len -= 1;:删除元素后,线性表的长度减少 1。
-
函数返回:
return;:结束函数,返回到调用者。
总结:
相关文章:
数据结构:线性表
1、线性表概述 1.1线性表的定义 线性表(list):零个或多个数据元素的有限序列。 简单地来说,我们可以用下面这张图来描述一个线性表: 1.2 线性表的存储结构 1.2.1顺序存储结构——顺序表 顺序表是将数据全部存储到…...
Ansible PlayBook实践案例
一、PlayBook介绍 1.什么是playbook playbook 顾名思义,即剧本,现实生活中演员按照剧本表演,在 ansible 中,由被控计算机表演,进行安装,部署应用,提供对外的服务等,以及组织计算机处理各种各样…...
Tomcat后台弱口令部署war包
1.环境搭建 cd /vulhub/tomcat/tomcat8 docker-compose up -d 一键启动容器 2.访问靶场 点击Manager App tomcat8的默认用户名和密码都是tomcat进行登录 3.制作war包 先写一个js的一句话木马 然后压缩成zip压缩包 最后修改后缀名为war 4.在网站后台上传war文件 上传war文件…...
胤娲科技:DeepMind的FermiNet——带你穿越“薛定谔的早餐桌”
当AI遇上量子迷雾,FermiNet成了你的“量子导航仪” 想象一下,你早晨醒来,发现家里的厨房变成了薛定谔的实验室,你的咖啡杯和吐司同时处于“存在与不存在”的叠加态。 你伸手去拿,却不确定会不会摸到冰冷的空气或是热腾…...
迅为iTOP-STM32MP157开发板板载4G接口(选配)_千兆以太网_WIFI蓝牙模块_HDMI_CAN_RS485_LVDS接口等
迅为ITOP-STM32MP157是基于ST的STM32MP157芯片开发的一款开发平台。在STM32MP157开发平台上,我们也做了比较多的创新,其中重要的一点就是,iTOP-STM32MP157核心板电源管理采用ST全新配套研制的PMIC电源管理芯片STPMU1A。为整个系统的稳定运行提…...
Android Choreographer 监控应用 FPS
Choreographer 是 Android 提供的一个强大的工具类,用于协调动画、绘制和视图更新的时间。它的主要作用是协调应用的绘制过程,以确保流畅的用户体验。Choreographer 也可以帮助我们获取帧时间信息,从而为性能监测和优化提供重要的数据支持。 …...
关于 mybatis-plus-boot-starter 与 mybatis-spring-boot-starter 的错误
不是知道你是否 出现过这样的错误 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 经过各种度娘,无非就是让你检查三种情况 情况一:mapper.xml没有按照传统的maven架构进行放置 情况二:mybatis的配置信…...
NLP 文本分类任务核心梳理
解决思路 分解为多个独立二分类任务将多标签分类转化为多分类问题更换 loss 直接由模型进行多标签分类 数据稀疏问题 标注更多数据,核心解决方案: 自己构造训练样本 数据增强,如使用 chatGPT 来构造数据更换模型 减少数据需求增加规则弥补…...
k8s中pod的创建过程和阶段状态
管理k8s集群 kubectl k8s中有两种用户 一种是登录的 一种是/sbin/nologin linux可以用密码登录,也可以用证书登录 k8s只能用证书登录 谁拿到这个证书,谁就可以管理集群 在k8s中,所有节点都被网络组件calico设置了路由和通信 所以pod的ip是可以…...
NSSCTF刷题篇1
js类型 [SWPUCTF 2022 新生赛]js_sign 这是一道js信息泄露的题目直接查看源码,有一个main.js文件点击之后,有一串数字和一段base64编码,解开base64编码得到这个编码为敲击码 解码在线网站:Tap Code - 许愿星 (wishingstarmoye.…...
[数据集][目标检测]棉花叶子病害检测数据集VOC+YOLO格式977张22类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):977 标注数量(xml文件个数):977 标注数量(txt文件个数):977 标注类别…...
产品经理面试整理-常见面试问题
以下是一些常见的产品经理面试问题及其解答思路。这些问题涵盖了产品管理的各个方面,包括战略、执行、数据分析、用户体验、跨团队合作等。在准备这些问题时,使用结构化的回答方式(如STAR法)能够帮助你更好地表达你的观点和经验。 1. 常见产品经理面试问题 1.1 你如何定义用…...
数据库(选择题)
基本概念 数据库(DB):长期存储在计算机内的、有组织的、可共享的数据集合。 数据库管理系统(DBMS):它是数据库的机构,是一个系统软件,负责数据库中的数据组织、数据操纵、数据维护…...
粒子向上持续瀑布动画效果(直接粘贴到记事本改html即可)
代码: 根据个人喜好修改即可 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>宽粒子向上…...
卷积神经网络(CNN):深度学习中的视觉奇迹
目录 一、什么是卷积神经网络? 二、CNN的核心组件 1. 卷积层(Convolutional Layer) 2. 激活函数(Activation Function) 3. 池化层(Pooling Layer) 4. 全连接层(Fully Connected…...
Vue:加载本地视频
目录 封装视频弹框调用视频组件 封装视频弹框 <template><el-dialog class"videoBox" :title"title" :visible.sync"visible" width"40%" :before-close"handleOnClose" :close-on-click-modal"false" …...
论文阅读:A Generalization of Transformer Networks to Graphs
论文阅读:A Generalization of Transformer Networks to Graphs 论文地址1 摘要2 贡献Graph TransformerOn Graph Sparsity(图稀疏)On Positional Encodings(位置编码)3 Graph Transformer Architecture(架…...
中国计量大学《2022年801+2022年819自动控制原理真题》 (完整版)
本文内容,全部选自自动化考研联盟的:《25届中国计量大学801819自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2022年801真题 2022年819真题 Part1:2022年完整版真题 2022年801…...
创客匠人运营课堂|增强用户的参与度和忠诚度,这一个工具就能实现!
活动投票是通过营销活动来提升用户粘性及平台裂变效果的工具。可以让活动得到更好的传播,平台品牌得到更大的曝光。 使用场景 活动投票是一种互动营销手段,适用于各种活动场景,具有增强用户的参与度和忠诚度,提高活动的透明度和公…...
k8s 微服务 ingress-nginx 金丝雀发布
目录 一 什么是微服务 二 微服务的类型 三 ipvs模式 3.1 ipvs模式配置方式 四 微服务类型详解 4.1 clusterip 4.2 ClusterIP中的特殊模式headless 4.3 nodeport 4.4 loadbalancer 4.5 metalLB 4.6 externalname 五 Ingress-nginx 5.1 ingress-nginx功能 5.2 部署…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能
vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能 查看官网:https://vxetable.cn 效果 代码 通过 checkbox-config.isShift 启用批量选中,启用后按住快捷键和鼠标批量选取 <template><div><vxe-grid v-bind"gri…...
