zfk_蓝桥杯C++学习_语言基础_线性表及顺序表

news/2025/12/17 0:26:05/文章来源:https://www.cnblogs.com/ahpu-zfk/p/19359839

一、线性表

1.定义: 由n(n≥0)个数据特性相同的元素构成的有限序列,称为线性表。

2.线性表的特点:
线性表是n个数据元素的有限序列,其中n个数据是相同数据类型的。

线性表中元素的个数n(n≥0)定义为线性表的长度,当n=0时称之为空表。

对于非空的线性表或线性结构,其特点是:
(1)存在唯一的一个被称作“第一个”的数据元素;
(2)存在唯一的一个被称作“最后一个”的数据元素;
(3)除第一个元素外,结构中的每个数据元素均只有一个前驱;
(4)除最后一个元素外,结构中的每个数据元素均只有一个后继。

3.线性表 ADT

ADT List 
{数据对象:D={ailai∈ ElemSet,i=1,2, ... ,n,n≥0}数据关系:S={<ai-1,ai>|ai-1,ai ∈ D, i=2, ... ,n}基本操作:InitList (&L)操作结果:构造一个空的线性表L。DestroyList (&L)初始条件:线性表L已存在。操作结果:销毁线性表L。
} ADT List

二、顺序表

1.定义: 用一组连续的内存单元依次存储线性表的各个元素,也就是说,逻辑上相邻的元素,实际的物理存储空间也是连续的。

2.基本操作:

(1)顺序表-初始化

#define MAXSIZE 100
typedef int ElemType;typedef struct
{ElemType data [MAXSIZE];int length;
} SeqList;void initList (SeqList *L)
{L->length = 0;
}

(2)顺序表-在尾部添加元素

int appendElem(SeqList *L, ElemType e)
{if (L->length>=MAXSIZE){printf("顺序表已满\n");return 0;}L->data[L->length] = e;L->length++;return 1;
}

(3)顺序表-插入元素

int insertElem(SeqList *L, int pos, ElemType e)
{if (pos <= L->length){for (int i = L->length-1; i >= pos-1; i -- ){L->data[i+1] = L->data[i];}L->data[pos-1] = e;L->length++;}return 1;
}

(4)顺序表-删除元素

int deleteElem(SeqList *L, int pos, ElemType *e)
{*e = L->data [pos-1] ;if (pos < L->length){for (int i = pos; i < L->length; i++){L->data[i-1] = L->data[i];}}L->length --;return 1;
}

(5)顺序表-遍历

void listElem (SeqList *L)
{for (int i = 0; i < L->length; i++){printf("%d ", L->data[i]) ;}printf("\n");
}

(6)顺序表-查找

int findElem(SeqList *L, ElemType e)
{for (int i = 0; i < L->length; i++){if (L->data[i] == e){return i + 1;}}return 0;
}

(7)顺序表-动态分配内存地址初始化

typedef struct
{ElemType *data;int length;
} SeqList;SeqList* initList ()
{SeqList *L = (SeqList*)malloc(sizeof(SeqList));L->data = (ElemType*) malloc(sizeof (ElemType)*MAXSIZE);L->length = 0;return L;
}

3.缺点:
顺序表作为基于连续内存空间的数据结构,不管是静态还是动态实现方式,都存在插入删除效率低、扩容有额外开销等缺点。

(1)插入与删除操作效率低:顺序表要保持元素的连续存储特性,当在表头或表中间位置执行插入操作时,得把目标位置及之后的所有元素依次后移,才能腾出空间;删除这类位置的元素时,又要把删除位置之后的元素依次前移来填补空缺。这些操作都要移动大量元素,时间复杂度为 O (n),数据量越大,操作耗时越明显。例如在有 1000 个元素的顺序表第 10 位插入元素,就需要移动后续 991 个元素。

(2)扩容操作存在额外开销:静态顺序表的大小固定,一旦元素数量达到预设上限就无法继续插入;动态顺序表虽可扩容,但过程繁琐。通常要先申请一块更大的新内存,接着将旧空间中的所有数据复制到新空间,最后释放旧空间。而且若扩容策略不合理,比如每次只扩容 1 个单位,插入 n 个元素可能产生 O (n²) 的时间成本;即便采用翻倍扩容的推荐策略,扩容时的数据拷贝操作依旧会带来短暂的性能损耗。

(3)空间利用率不佳:静态顺序表容易出现空间浪费或不足的问题,预设空间过大,多余部分会闲置;预设过小又会提前达到存储上限,无法新增元素。动态顺序表也有缺陷,扩容后若后续删除了大量元素,多出来的空闲空间往往不能自动释放,只能手动处理(部分编程语言),这就造成了内存的无效占用。比如动态顺序表扩容到 200 个存储单元后,若元素减少到 50 个,剩余 150 个单元的空间就被浪费了。

(4)依赖连续内存空间:顺序表需要一块完整连续的内存区域存储数据。当数据量较大时,系统中可能难以找到适配的连续内存块,即便此时系统整体剩余内存总量足够,也无法满足顺序表的存储需求,从而限制了其存储大规模数据的灵活性。

(5)易引发内存相关问题:在 C/C++ 等需要手动管理内存的语言中,动态顺序表若使用后忘记释放内存,会造成内存泄漏;同时扩容后旧空间若释放不当,还可能产生内存碎片。这些问题不仅浪费系统资源,还可能导致程序运行异常,增加了开发中的内存管理难度。

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

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

相关文章

当InfluxDB还在“散步”,金仓数据库已经“起飞”了!——一次不太公平的时序对决实录

金仓数据库&#xff08;KingbaseES&#xff09;是中国成立最早、拥有完全自主知识产权的国产大型通用数据库管理系统。其核心产品KingbaseES因其高可靠、高性能、高安全、易管理、易使用的特性而广受认可&#xff0c;是企业级关键业务应用的坚实数据底座。 金仓数据库由北京人大…

动态IP的使用方法

动态IP&#xff08;Dynamic IP&#xff09;是指由互联网服务提供商&#xff08;ISP&#xff09;动态分配的IP地址&#xff0c;每次连接网络时可能会变化。以下是使用动态IP的常见方法和注意事项。配置动态IP获取大多数情况下&#xff0c;设备默认设置为自动获取IP地址&#xff…

TradingView图表库K线生成机制深度解析与实战指南

TradingView图表库作为金融科技领域领先的可视化解决方案&#xff0c;其核心的数据流处理机制对于构建高性能交易系统至关重要。本文将从实际开发场景出发&#xff0c;深入剖析实时K线生成的核心原理&#xff0c;并提供可落地的技术实现方案。 【免费下载链接】charting-librar…

LobeChat求职信撰写辅助系统

LobeChat求职信撰写辅助系统 在竞争日益激烈的就业市场中&#xff0c;一封精准、专业且富有个人特色的求职信&#xff0c;往往是打开理想职位大门的第一把钥匙。然而现实是&#xff0c;许多求职者花费数小时反复修改&#xff0c;最终仍难以写出真正打动HR的内容——要么过于模板…

NBA 球员交易解禁有啥规则?看保罗的情况就懂了!

2025 年 12 月 16 日&#xff08;对应美国当地时间 12 月 15 日&#xff09;&#xff0c;对于 NBA 球星克里斯 - 保罗来说&#xff0c;是个特殊的日子 —— 按照 NBA 劳资协议&#xff0c;这一天成为他能被洛杉矶快船队交易的关键节点&#xff0c;也让他有望告别当前困境&#…

智能字体协作者:AutoCAD字体自动修复的终极解决方案

智能字体协作者&#xff1a;AutoCAD字体自动修复的终极解决方案 【免费下载链接】FontCenter AutoCAD自动管理字体插件 项目地址: https://gitcode.com/gh_mirrors/fo/FontCenter 在当今数字化设计时代&#xff0c;AutoCAD字体修复已成为提升设计效率的关键环节。您的团…

字符设备驱动(5)

一 、简介字符设备与杂项设备的区别&#xff1a; &#xff08;1&#xff09;杂项设备的主设备号是固定为10&#xff0c;学习字符类设备就需要自己或者系统来分配 &#xff08;2&#xff09;杂项设备可以自动生成设备节点&#xff0c;字符设备需要自己生成设备节点二、申请设备号…

项目计划如何制定才靠谱?WBS、甘特图、里程碑一次讲清

很多团队觉得“项目计划不好做”&#xff0c;其实不是难&#xff0c;而是没抓住方法论的核心。 项目计划不是排日历&#xff0c;也不是写大纲&#xff0c;它是一种“把未来的工作结构化、可控化”的技术活。这篇文章我将把 WBS、甘特图、里程碑三件套 讲清楚&#xff0c;也讲讲…

鸣潮自动化工具:新手也能轻松掌握的3大核心功能详解

鸣潮自动化工具&#xff1a;新手也能轻松掌握的3大核心功能详解 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 鸣潮自动化…

LoRA微调概论

&#x1f34b;&#x1f34b;AI学习&#x1f34b;&#x1f34b;&#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主…

永磁同步电机无位置传感器控制:龙伯格(Luenberger)观测器与Simulink模型

龙伯格 luenberger观测器&#xff0c;永磁同步电机无位置传感器控制&#xff0c;simulink模型&#xff0c;使用PLL锁定位置。在永磁同步电机&#xff08;PMSM&#xff09;的控制领域&#xff0c;无位置传感器控制技术近年来备受关注。这种技术能够在不依赖物理位置传感器的情况…

零刻预告全球最小双盘位NAS:Intel、AMD、Arm随便选

零刻预告全球最小双盘位NAS:Intel、AMD、Arm随便选Posted on 2025-12-17 00:18 lzhdim 阅读(0) 评论(0) 收藏 举报现在,零刻预告了新款NAS ME Pro,号称世界上最小的双盘位NAS,长宽尺寸只有166mm、121mm,高度…

C# 排序,字典以及类相关知识点扩宽

一、冒泡排序冒泡排序:俩两相比&#xff0c;如果前面大于后面的值这时候交换位置。 外循环要经过多少轮 一轮找出一个最值 内循环比较多少次 例如5个数比较4次即可&#xff0c;下一轮的时候 不用和上传最值进行比较&#xff0c;所以写内循环次数可以 这样写list.Count-1-iList&…

Daily Prob 5

多次重剖之后树的深度这次不是什么级数求和了。对于一个有根树,我们如下定义重链剖分:对于每个点 \(a\),找到子节点中子树大小最大的那一个(如果有多个任取一个),记为 \(b\),然后将 \((a, b)\) 这条边设为重边。…

Applite:终极Mac软件管理神器,让Homebrew图形化操作如此简单

Applite&#xff1a;终极Mac软件管理神器&#xff0c;让Homebrew图形化操作如此简单 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为复杂的终端命令而头疼吗&#xff1f…

阿里云渠道商:轻量服务器远程协作性能优化指南

一、引言 随着远程办公常态化&#xff0c;轻量应用服务器成为中小团队首选。但许多用户反馈阿里云轻量服务器&#xff08;如 2 核 2G 配置&#xff09;在远程协作时出现卡顿、延迟问题。文章提供 3 步优化方案&#xff0c;助您提升远程协作流畅度。二、优化方案第一步&#xff…

如何实现 “右移”的智能监控,快速定位和恢复线上事故?

一、核心理念:从“被动响应”到“主动预警” 传统监控停留在“故障发生-告警-人工处理”,而智能“右移”强调生产环境的事前预防、事中定位、事后自愈。 二、智能监控体系分层设计 1. 数据采集层 多维度埋点: 应用层:日志(结构化/非结构化)、链路追踪(Trace)、关键业…

我发现图神经网络补全罕见病知识图谱基层漏诊率骤降

&#x1f4dd; 博客主页&#xff1a;Jax的CSDN主页 目录医生打字慢到怀疑人生&#xff1f;AI医生竟成“键盘侠”救星 一、当AI医生遇上人类医生&#xff1a;一场效率革命 二、AI医生的"作弊"秘籍&#xff1a;从打字小能手到诊断大师 三、AI医生的成长烦恼&#xff1a…

在React Native中实现鸿蒙跨平台开发分享功能,你可以使用`react-native-share`库,这个库支持多种分享方式,包括文本分享、图片分享,甚至是文件分享

在React Native中实现分享功能&#xff0c;你可以使用react-native-share库&#xff0c;这个库支持多种分享方式&#xff0c;包括文本分享、图片分享&#xff0c;甚至是文件分享。下面是如何使用react-native-share来实现这些功能的步骤&#xff1a; 安装react-native-share …

BetterNCM插件完整使用指南:从入门到精通的网易云音乐体验升级

BetterNCM插件完整使用指南&#xff1a;从入门到精通的网易云音乐体验升级 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在使用基础的网易云音乐客户端吗&#xff1f;BetterNCM插件…