数据结构基本知识

数据结构是计算机中组织和存储数据的方式,核心目标是提高数据操作(增删改查)的效率,适配不同场景的性能需求。其核心包含"逻辑结构""物理结构"和"基本操作"三大模块,是编程与算法设计的基础。

一、逻辑结构

逻辑结构描述数据元素之间的抽象关系,与存储介质无关,主要分为四类:

• 线性结构:数据元素按"一对一"顺序排列,仅有一个起点和一个终点,如数组、链表、栈、队列。例如数组中元素按索引连续有序,每个元素(除首尾)仅有一个前驱和一个后继。

• 树形结构:数据元素按"一对多"层级排列,存在根节点、子节点等层级关系,如二叉树、红黑树、B树。典型例子是文件系统的目录结构,一个根目录下可包含多个子目录和文件。

• 图形结构:数据元素按"多对多"任意关联,每个元素可与多个其他元素建立关系,如无向图、有向图、加权图。比如社交网络中用户之间的好友关系,构成复杂的图形结构。

• 集合结构:数据元素间无明确关联,仅属于同一集合(满足特定条件的元素分组),如数学中的集合,仅关注元素是否存在,不考虑顺序和关联。

二、物理结构(存储结构)

物理结构指数据在计算机内存中的实际存储方式,直接影响操作效率,主要分为两类:

• 顺序存储:数据元素连续存储在一段物理地址连续的内存空间中,如数组。优点是随机访问速度快(通过索引直接定位),缺点是插入/删除需移动大量元素(需保持连续性)。

• 链式存储:数据元素分散存储在内存中,通过指针(或引用)关联前后元素,如链表。优点是插入/删除无需移动元素(仅修改指针),缺点是无法随机访问(需从表头遍历查找)。

三、核心数据结构及特性

  1. 线性表(基础线性结构)

• 数组:顺序存储,固定长度(静态)或动态扩容,支持O(1)随机访问,增删操作时间复杂度O(n)。

• 链表:链式存储,分为单链表(仅存后继指针)、双链表(存前后继指针)、循环链表(首尾相连),增删操作O(1)(已知位置),访问O(n)。

  1. 栈与队列(受限线性结构)

• 栈:"先进后出"(LIFO),仅允许在栈顶操作,支持push(入栈)、pop(出栈)、peek(查看栈顶),时间复杂度均为O(1),常用于递归、表达式求值、括号匹配。

• 队列:"先进先出"(FIFO),允许在队尾入队、队首出队,支持enqueue(入队)、dequeue(出队),基础队列O(1)操作,优先级队列(按优先级排序)O(logn)操作,常用于任务调度、广度优先搜索(BFS)。

  1. 树结构(层级关联结构)

• 二叉树:每个节点最多有两个子节点(左子树、右子树),常见类型有满二叉树(所有节点均有两个子节点)、完全二叉树(除最后一层外均满,最后一层左连续)。

• 遍历方式:前序遍历(根→左→右)、中序遍历(左→根→右)、后序遍历(左→右→根)、层序遍历(按层级从上到下),均为O(n)时间复杂度。

• 应用变种:二叉搜索树(左子树值<根<右子树值,支持O(logn)查找)、红黑树(自平衡二叉搜索树,避免极端情况)、堆(完全二叉树,分为大顶堆/小顶堆,用于优先级队列)。

  1. 图结构(多对多关联结构)

• 表示方法:邻接矩阵(二维数组,适合稠密图)、邻接表(链表数组,适合稀疏图)。

• 遍历方式:深度优先搜索(DFS,递归或栈实现)、广度优先搜索(BFS,队列实现),均为O(V+E)(V为顶点数,E为边数)。

• 核心应用:最短路径(Dijkstra算法、Floyd算法)、拓扑排序(针对有向无环图DAG)、连通分量查找。

  1. 哈希表(高效查找结构)

• 原理:通过哈希函数将键(key)映射到内存地址,实现O(1)平均查找效率,解决哈希冲突的方式有拉链法(冲突元素链表存储)、开放地址法(线性探测、二次探测)。

• 特性:查找、插入、删除效率高,无序存储,适用于缓存、字典、数据去重等场景。

四、数据结构的选择原则

• 优先考虑操作频率:查询频繁选顺序存储(数组、哈希表),增删频繁选链式存储(链表)。

• 考虑数据规模:小规模固定数据用数组,大规模动态数据用链表、栈/队列。

• 考虑场景需求:层级关系用树(如文件系统),复杂关联用图(如社交网络),有序查找用二叉搜索树/红黑树,无序快速查找用哈希表。

相关推荐
菜鸟233号6 小时前
力扣669 修剪二叉搜索树 java实现
java·数据结构·算法·leetcode
jingfeng5148 小时前
哈希表的概念+实现
数据结构·哈希算法·散列表
ホロHoro9 小时前
数据结构非线性部分(1)
java·数据结构·算法
沉下去,苦磨练!9 小时前
实现二维数组反转
java·数据结构·算法
玖剹9 小时前
哈希表相关题目
数据结构·c++·算法·leetcode·哈希算法·散列表
红豆诗人9 小时前
数据结构初阶知识--单链表
c语言·数据结构
L_090710 小时前
【C++】高阶数据结构 -- 二叉搜索树(BST)
数据结构·c++
仰泳的熊猫10 小时前
1150 Travelling Salesman Problem
数据结构·c++·算法·pat考试
lixzest11 小时前
C++中经常用的头文件介绍
数据结构·c++·算法
一起养小猫12 小时前
《Java数据结构与算法》第四篇(四):二叉树的高级操作查找与删除实现详解
java·开发语言·数据结构·算法