算法与数据结构——数据结构的分类
数据结构的分类
常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图,它们可以从“逻辑结构”和“物理结构”两个维度进行分类
逻辑结构:线性与非线性#
逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线性关系;而在数中,数据从顶部向下按层次排列,表现出“祖先”与“后代”之间的派生关系;图则由节点和边构成,反映了复杂的网络关系。
逻辑结构可分为“线性”和“非线性”两大类。线性结构比较直观,值数据在逻辑关系上呈线性排列;非线性结构则相反,呈非线性排列。
- 线性数据结构:数组、链表、栈、队列,元素之间是一一对应的顺序关系
- 非线性数据结构:树、堆、图、哈希表。
非线性数据结构可以进一步划分为树形结构和网状结构。
- 树形结构:树、堆、哈希表,元素之间是一对多的关系。
- 网状结构:图,元素之间是多对多的关系。
物理结构:连续与分散#
当算法程序运行时,正在处理的数据主要存储在内存中。系统通过内存地址来访问目标位置的数据。
内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用。因此在数据结构与算法的设计中,内存资源是一个重要的考虑因素。比如算法所占用的内存峰值不应超过系统剩余空闲内存;如果缺少连续大块的内存空间,那么选用的数据结构必须能够存储在分散的内存空间内。
物理结构反映了数据在计算机内存中的存储方式,可分为连续空间存储(数组)和分散空间存储(链表)。物理结构从底层决定了数据的访问、更新、增删等操作方法,两种物理结构在时间效率和空间效率方面呈现出互补的特点。
说明:所有数据结构都是基于数组、链表或者二者的组合实现的。例如,栈和队列既可以使用数组实现,也可以使用链表实现;而哈希表的实现可能同时包含数组和链表。
- 基于数组可实现:栈、队列、哈希表、树、堆、图、矩阵、张量(维度大于等于3的数组)等
- 基于链表可实现:栈、队列、哈希表、树、堆、图等。
链表在初始化后,仍可以子啊程序运行过程中对其长度进行调整,因此也称“动态数据结构”。数组在初始化后,长度不可变,因此也称“静态数据结构”,但是数组可以通过重新分配内存实现长度变化,从而具备一定的“动态性”。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)