数据结构:线性表
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 部署…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...