当前位置: 首页 > news >正文

数据结构 顺序表(1)

目录

1.线性表

2.顺序表

1.线性表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用

的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…

线性表在逻辑上是线性结构,也就是说是连续的一条直线。但是在物理结构上并不一定是连续的,

线性表在物理上存储时,通常以数组和链式结构的形式存储。

线性表在数据结构中有着重要的作用, 线性表在数据结构里,是搭建知识体系的“基石”,也是解决

实际线性数据问题的“实用工具箱”,学好它对掌握更深入的数据结构和算法知识,有着“牵一发而动

全身”的关键价值。

而本篇我们将要学习存储数据的第一种结构,也就是线性表中的顺序表:

2.顺序表

2.1 概念和结构

概念:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用

存储。

它的结构如下:

2.2 分类

2.2.1 静态顺序表

-静态顺序表:使用定长数组来存储数据元素的顺序表。在C语言中,一般通过预先定义好长度的数

组来实现,并且会用一个变量记录当前已存储的有效数据个数 。例如:

2.2.2 动态顺序表

动态顺序表:基于动态内存分配(如C语言中的 malloc 和 free )来管理存储空间的顺序表。它包

含一个指向动态分配内存空间的指针,同时会记录当前已存储的数据个数以及整个顺序表的容量。

当数据元素增加导致空间不足时,可以通过重新分配内存(如 realloc )来扩大存储空间。示例代

码如下

区别:

存储空间分配:

- 静态顺序表:在编译时就确定了数组的大小,其占用的内存空间是固定的。一旦定义,在程序运

行过程中无法改变数组的长度。

- 动态顺序表:初始时分配一定大小的内存空间,在使用过程中,根据实际需求(如插入元素时发

现空间不足),通过动态内存分配函数来增加或减少内存空间,具有更好的灵活性。

空间利用率:

- 静态顺序表:如果预先分配的空间过大,会造成内存浪费;若分配空间过小,在数据量超出时又

无法存储更多数据,容易导致溢出错误 。例如定义了长度为100的静态顺序表,但实际只存储10个

数据,就浪费了90个数据单元的空间。

- 动态顺序表:根据实际数据量动态调整内存空间,能更合理地利用内存资源。不过,动态内存分

配和重新分配操作也会带来一定的额外开销(如频繁调用 realloc )。

插入和删除操作的复杂度(涉及扩容情况):

- 静态顺序表:插入和删除操作时,如果不涉及数组越界,时间复杂度主要是移动元素的开销,平

均时间复杂度为 O(n) 。但如果在插入时数组已满,就无法完成操作,需要提前预估足够大的空

间。

- 动态顺序表: 在空间足够的情况下,插入和删除操作与静态顺序表类似,平均时间复杂度为 O(n)

。而当空间不足需要扩容时,除了移动元素的开销,还需要进行动态内存分配(如用 realloc ),

虽然单次扩容操作时间复杂度较高,但均摊到每次插入操作上,平均时间复杂度仍接近 O(1) (采

用均摊分析) 。

实现复杂度:

- 静态顺序表:实现相对简单,不需要处理动态内存分配、释放以及扩容等复杂逻辑,代码编写和

理解起来相对容易。

- 动态顺序表:需要处理动态内存的申请、释放以及在空间不足时的扩容操作,实现过程相对复

杂,同时还要注意内存泄漏等问题(如忘记释放不再使用的内存)。

综上所述,通过静态表和动态表的对比区别,我们可以得出动态表更加全面,在写代码的过程中也

更加复杂。所以我们下面学习的顺序表是围绕着动态顺序表展开的

感谢大家的观看,  下篇文章,我们将讲述关于顺序表的实现,也是关于顺序表最重要的内容。

http://www.dtcms.com/a/272812.html

相关文章:

  • 等保-linux-三权分立账号设置,系统管理员、安全管理员、审计管理员
  • 目标检测中的评价指标计算
  • 数据结构 —— 键值对 map
  • Git操作技巧(一)
  • shell学习从入门到精通
  • 数据仓库:企业数据管理的核心枢纽
  • 创客匠人视角:从信任经济看创始人 IP 如何重塑 IP 变现逻辑
  • nmap扫描指定网段中指定开放端口的主机(IP,mac地址)
  • 量子计算系统软件:让“脆弱”的量子计算机真正可用
  • 有什么好使用的内网ip映射软件?可以让家庭/公司网络局域网端口,让公网互联网跨网访问
  • Spring boot整合dubbo+zookeeper
  • 26-计组-外存
  • 基于云端EC2的O3DE机器人仿真环境搭建指南
  • python自动化面试问题——关于python
  • 029_构造器重载与默认构造器
  • 【报错】Could not find a package configuration file provided by ‘glog’”
  • “Datawhale AI夏令营”基于带货视频评论的用户洞察挑战赛
  • 使用Tensorflow和CNN进行猫狗图片训练的实战总结
  • P1722 矩阵 II 题解 DFS深度优先遍历与卡特兰数(Catalan number)解
  • Spring Boot+Redis+Caffeine 二级缓存架构的终极实现方案、包含万级QPS下的黄金配置参数、全文超过2500字(博君一赞)
  • XGBoosting算法详解(Boosting思想的代表算法)
  • C语言<数据结构-链表>
  • LangChain RAG 实战
  • Transformers 和 PyTorch 的区别与安装指南
  • Docker 高级管理--Dockerfile镜像制作
  • Context Engineering Framework 系统详细介绍
  • 链表算法之【合并两个有序链表】
  • 牛客笔试题 除2!
  • 读取按键的四种方式
  • IMU误差模型