【数据结构】顺序表和链表

embedded/2025/3/19 15:34:10/

一、线性表

线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表有:顺序表,链表,栈,队列,字符串

线性表在逻辑上是线性结构,也就是说是连续的一条直线。但是在物理结构中并一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

二、顺序表

2.1 概念以及结构

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。

顺序表一般可以分为:

静态顺序表:使用定长数组存储元素。

动态顺序表:使用动态开辟的数组存储。

中间、头部的插入删除,时间复杂度为O(N)

增容需要申请新的空间,拷贝数据,释放就空间,会有不小的开销

增容一般是呈现2倍的增长,势必会有一定的空间浪费。例如,当前容量为100,满了之后增容到200,我们再继续插入5个数组,后面没有数据插入了,那么就浪费了95个数据空间

三、链表

3.1 链表的概念以及结构

概念:链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

链式结构在逻辑上是连续的,但是在物理上不一定是连续的

现实中的节点一般是从堆上申请出来的

从堆上申请的空间,是按照一定的策略来分配的,两次申请的空间可能连续,也可能不连续 

3.2 链表的分类

单向或者双向

带头或者不带头

循环或者非循环

虽然有这么多的链表的结构,但是我们实现中最常用的还是两种结构:

无头单向非循环链表:结构简单,一般不会单独用来存储数据。实际上更多是作为其他数据结构的子结构,比如:哈希桶,图的邻接表等等。

带头双向循环链表:结构最复杂,一般用在单独存储数据。实际上使用的链表数据结构,都是带头双向循环链表

四、顺序表和链表的区别和联系

不同点顺序表链表
存储空间上物理上一定连续逻辑上连续,物理上不一定连续
随机访问支持O(1)不支持,O(N)
任意位置插入或者删除元素可能需要搬移元素,效率低,O(N)只需修改指针的指向
插入动态顺序表,空间不够时需要扩容没有容量的概念
应用场景元素高效存储 + 频繁访问任意位置插入和删除频繁
缓冲利用率


http://www.ppmy.cn/embedded/173892.html

相关文章

【CSS】一、基础选择器

文章目录 1、CSS2、CSS的引入方式3、选择器3.1 标签选择器3.2 类选择器3.3 id选择器3.4 通配符选择器 4、练习:画盒子 1、CSS CSS,Cascading Style Sheets,层叠样式表,是一种样式表语言,用于表述HTML的呈现&#xff0…

组合Composition(has-a)

在 Python 中,**组合(Composition)** 是一种设计模式,用于将一个类的实例作为另一个类的属性。这种模式允许你将多个类的功能组合在一起,而不是通过继承来实现。组合强调的是“有一个”(has-a)关…

桌子(table、desk)以及其他常见物体的urdf模型,用于搭建机器人环境如pybullet、Gazebo

一、背景 我们在搭建仿自己的仿真环境时,需要添加一些物品,如桌子,托盘等,使得我们的场景更丰富并贴合我们的任务。但手写这些常见物品的urdf是不现实的,所以下面给出了github上开源的模型,感谢开源。 我…

如何让焦虑为城市供能 | 杂谈

凌晨两点,我盯着满桌冷掉的碳烤磷虾烩面——这顿价值500星币的宵夜。当冒充食客的就餐员像幽灵般消失后,躁动的神经末梢突然刺破迷雾:那些令人窒息的负能量,是否能在量子层面转化为清洁动能? 这个疯狂假设打开了四维能…

Machine Learning: 十大基本机器学习算法

机器学习算法分类:监督学习、无监督学习、强化学习 基本的机器学习算法: 线性回归、支持向量机(SVM)、最近邻居(KNN)、逻辑回归、决策树、k平均、随机森林、朴素贝叶斯、降维、梯度增强。 机器学习算法大致可以分为三类: 监督学习算法 (Sup…

Qt Widgets、Qt Quick

一、核心概念 ‌Qt Widgets‌ Qt框架中的传统桌面UI开发组件库,基于C实现,提供按钮、文本框等控件‌。适用于需要深度集成操作系统底层功能或复杂业务逻辑的桌面应用‌。 ‌Qt Quick‌ QML的标准库和工具包,提供预置的视觉组件(如…

Spring IOC(五个类注解)

controller、service、Repository、Component 、Configurationpackage com.java.ioc;import com.java.ioc.Controller.HelloController; import com.java.ioc.rep.UserRepository; import com.java.ioc.service.UserService; import org.springframework.boot.SpringApplicatio…

UI设计公司:数据大屏设计提升用户体验的方法

在当今数据驱动的时代,数据大屏作为信息展示和决策支持的重要工具,其设计不仅关乎数据的准确性和可读性,更直接影响到用户体验和决策效率。一个精心设计的数据大屏能够迅速捕捉用户的注意力,提供直观、清晰的信息视图,…