数据结构基本知识

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

一、逻辑结构

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

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

• 树形结构:数据元素按"一对多"层级排列,存在根节点、子节点等层级关系,如二叉树、红黑树、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)平均查找效率,解决哈希冲突的方式有拉链法(冲突元素链表存储)、开放地址法(线性探测、二次探测)。

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

四、数据结构的选择原则

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

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

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

相关推荐
wuyk55511 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
郝学胜-神的一滴12 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
疯狂打码的少年12 小时前
【数据结构】二叉树的性质(五大性质+计算)
数据结构·笔记·算法
wabs66613 小时前
关于图论【A*算法 | 卡码网127.骑士的攻击的思考】
数据结构·算法·图论·卡码网·广搜的改进版
凉茶钱13 小时前
【数据结构】堆的应用
c语言·数据结构
间歇性努力持续性发呆的野生快乐选手14 小时前
栈的性质(进栈,出栈,访问)
数据结构·c++
m0_5474866615 小时前
《数据结构与算法》全套PPT课件2026(中国海洋大学)
数据结构·算法
旖旎夜光15 小时前
LeetCode 904:水果成篮(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
我变成萤火虫17 小时前
河南萌新联赛2026第(三)场:郑州轻工业大学
数据结构·c++·算法·贪心算法·stl·深度优先·哈希算法
白狐_79817 小时前
408数据结构第7章:B树①——基础概念与结构
数据结构·b树