数据结构--线性结构和矩阵广义表
数据结构
数据结构是计算机存储、组织数据的方式。数据结构是相互之间存在一种或多种特定关系的数据元素集合。
算法是指解题方案准确而完整的描述,是一系列解决问题的清晰指令,算法代表描述解决问题的策略机制。
线性结构
数组是有序的元素的序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。
数组的特点
-
- 初始化内存分配完成,大小确定
- 内存地址连续
- 依靠下标寻找元素
- 支持多维嵌套
- 仅存储同一类型的数据
数组的优点
-
- 按照下标查找快
- 遍历方便
- 定义简单
数组的缺点
-
- 大小恒定,且不能过大
- 不知索引查找慢
- 存储类型单一
数组为什么都从0开始编号?
数组是一种线性表,它用一组连续的内存空间,来存储一组相同类型的数据。
线性表结构:数组、队列、栈、链表
每个线性表的数据最多只有前后两个方向,与他对立的概念是非线性表,比如二叉树、堆、图。之所以叫非线性,是因为非线性表中,数据之间不是简单的前后关系
数组支持随机访问,根据下标随机访问的时间复杂度是O(1)
数组插入和删除的时间复杂度是O(n)
容器能否替代数组
Java ArrayList每次存储不够的时候,它将空间自动扩容为1.5倍。
因为扩容操作涉及内存申请和数据搬移,是比较耗时的。所以,如果事先能确定需要存储的数据大小,最好在创建 ArrayList 的时候事先指定数据大小。
使用数组优于容器的时候
-
- Java ArrayList无法存储基本类型,比如int long,比如 int、long,需要封装为 Integer、Long 类,而 Autoboxing、Unboxing 则有一定的性能消耗,所以如果特别关注性能,或者希望使用基本类型,就可以选用数组。
- 如果数据大小事先已知,并且对数据的操作非常简单,用不到 ArrayList 提供的大部分方法,也可以直接使用数组。
- 还有看个人喜好
链表
链表是一种物理单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表指针次序实现的。
链表一系列结点(链表每一个元素称为结点)组成,结点可以在运行时动态生成。
每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
链表的特点
-
- 大小可变,方便增删
- 数据域可存储多种类型变量
链表的插入删除(先建链再换链)
栈
栈又名堆栈,它是一种运算受限的线性表。栈又称为后劲先出的线性表,限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对的,另一端称为栈底
栈的基本运算
初始化栈InitStack:创建一个空栈
判断空isEmpty:当栈S为空时返回"真",否则返回"假"
入栈Push:将元素x加入栈顶,并且更新栈顶指针
出栈Pop:将栈顶元素从栈中删除,并更新栈顶指针
进栈与出栈可以同时进行
队列
队列先进先出,队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~