当前位置: 首页 > news >正文

数据结构笔试核心考点

在数据结构笔试中,核心围绕 “数据的逻辑结构、存储结构、操作效率、经典算法思想” 四大维度展开。

一、基础概念:数据结构的 “骨架”

1. 数据结构的核心三要素
  • 逻辑结构:数据元素之间的 “逻辑关系”(与存储无关),分为两类:
    • 线性结构:元素间一对一,如数组、链表、栈、队列、串。
    • 非线性结构:元素间一对多 / 多对多,如树(一对多)、图(多对多)、集合(无逻辑关系)。
  • 存储结构(物理结构):逻辑结构在计算机中的 “实际存储方式”,决定操作效率,核心有 4 种:
    存储结构特点典型应用
    顺序存储元素连续存放,用下标访问数组、顺序栈、顺序队列
    链式存储元素分散存放,用指针 / 引用连接单链表、双链表、链栈
    索引存储额外建 “索引表”(key + 地址),加速查找数据库索引
    散列存储(哈希)元素 key 通过哈希函数直接映射到存储地址哈希表、HashMap
  • 数据运算:对数据元素的操作(增删改查、排序、遍历),运算效率由 “逻辑结构 + 存储结构” 共同决定(如数组查快删慢,链表删快查慢)。
2. 时间复杂度与空间复杂度
  • 时间复杂度(T (n)):算法执行 “基本操作次数” 与问题规模 n 的关系,只保留最高次项(忽略常数、低次项)。
    • 常见复杂度排序(从优到劣):O(1) < O(log₂n) < O(n) < O(nlog₂n) < O(n²) < O(n³) < O(2ⁿ) < O(n!)
    • 高频场景:
      • O (1):数组随机访问、哈希表查找(无冲突时);
      • O (log₂n):二分查找、平衡二叉树(AVL、红黑树)的增删查;
      • O (n):线性查找、链表遍历;
      • O (n²):冒泡排序、插入排序、简单选择排序(双层循环)。
  • 空间复杂度(S (n)):算法执行时 “额外占用存储空间” 与 n 的关系(不包含输入数据的空间)。
    • 常见场景:
      • O (1):原地排序(冒泡、插入)、迭代算法(无额外数组 / 栈);
      • O (n):递归(递归栈深度为 n)、额外开辟大小为 n 的数组。

二、线性结构

1. 数组 vs 链表
对比维度数组(顺序存储)链表(链式存储)
访问效率O (1)(随机访问)O (n)(需遍历)
增删效率O (n)(需移动元素)O (1)(已知前驱 / 后继时)
存储空间静态分配(大小固定)动态分配(按需申请)
内存碎片无(连续存储)有(分散存储)
典型应用需频繁访问的场景(如矩阵、查找表)需频繁增删的场景(如链表队列、邻接表)
2. 栈:“先进后出(LIFO)” 的线性表
  • 定义:只允许在 “栈顶” 进行增(push)、删(pop)的线性表,栈底固定。
  • 存储:
    • 顺序栈:用数组实现,需注意 “栈满(top == 数组长度 - 1)” 和 “栈空(top == -1)”;
    • 链栈:用链表实现,栈顶为链表头(无需考虑栈满,只需判断栈空:head == null)。
  • 高频应用:括号匹配、表达式求值(后缀表达式)、函数调用栈、递归的非递归实现。
3. 队列:“先进先出(FIFO)” 的线性表
  • 定义:只允许在 “队尾” 增(enqueue)、“队头” 删(dequeue)的线性表。
  • 存储与关键问题:
    • 顺序队列:用数组实现,易出现 “假溢出”(队尾满但队头有空位);
    • 循环队列(笔试重点):解决假溢出,将数组视为环形,核心是 “判空 / 判满条件”:
      • 判空:front == rear(队头和队尾指针重合);
      • 判满:(rear + 1) % 数组长度 == front(预留一个空位,避免与判空混淆)。
  • 高频应用:进程调度(操作系统)、缓冲区(如 IO 缓冲)、广度优先搜索(BFS)。
4. 串(字符串)
  • 定义:由字符构成的线性表(特殊线性表),长度为 0 的串称为 “空串”(""),注意与 “空格串”(" ")区分。
  • 子串:串中任意连续字符组成的子序列(如 “abc” 的子串有 “a”“ab”“abc” 等),笔试常考 “子串个数计算”(长度为 n 的串,子串个数为 n (n+1)/2 + 1,+1 是空串)。
  • 模式匹配:在主串中找子串(模式串)的位置,笔试考算法概念:
    • 暴力匹配(BF 算法):逐个比对,时间复杂度 O (mn)(m 为主串长度,n 为模式串长度);
    • KMP 算法:利用 “部分匹配表(next 数组)” 跳过重复比对,时间复杂度 O (m+n)(无需掌握代码,但需知道 “优化暴力算法” 的核心思想)。

三、非线性结构

1. 树:“一对多” 的层次结构
(1)树的基本概念(必背)
  • 节点关系:父节点、子节点、兄弟节点、叶子节点(无子女)、非叶子节点(有子女);
  • 树的属性:
    • 深度:从 “根节点” 到该节点的路径长度(根深度为 1 或 0,笔试需看题干定义);
    • 高度:从该节点到 “最远叶子” 的路径长度(叶子高度为 1);
    • 度:节点的子节点个数(树的度是所有节点度的最大值)。
  • 森林:m 棵互不相交的树的集合(树是森林的特殊情况,m=1)。
(2)二叉树:“每个节点最多 2 个子树”
  • 特殊二叉树:

    类型定义关键性质
    满二叉树所有叶子在同一层,非叶子度均为 2深度为 k 时,节点总数 = 2ᵏ - 1
    完全二叉树按层序编号,每个节点编号与满二叉树一致(叶子只在最后两层)① n 个节点的完全二叉树,深度 =⌊log₂n⌋ + 1;② 父节点 i 的左子树 = 2i,右子树 = 2i+1(i 从 1 开始)
    二叉搜索树(BST)左子树值 < 根值 < 右子树值(中序遍历为升序)无平衡限制,最坏情况下退化为链表(查找 O (n))
    平衡二叉树(AVL)BST + 左右子树高度差≤1确保查找、增删效率均为 O (log₂n),平衡调整通过 “旋转”(LL、RR、LR、RL)
  • 二叉树的遍历:

    • 前序遍历(根→左→右);
    • 中序遍历(左→根→右);
    • 后序遍历(左→右→根);
    • 层序遍历(按层从左到右,用队列实现)。
    • 高频题:已知前序 + 中序,推导后序(或反之),核心是 “前序找根,中序分左右子树”。
(3)哈夫曼树(最优二叉树)
  • 定义:n 个叶子节点的二叉树中,“带权路径长度(WPL)最小” 的树(WPL=Σ 叶子权值 × 路径长度)。
  • 构建规则:每次选权值最小的两个节点作为左右子树,新节点权值为二者之和,重复至只剩一个节点。
  • 应用:哈夫曼编码(前缀编码,无歧义,用于数据压缩)。
2. 图:“多对多” 的复杂结构
(1)图的基本概念
  • 分类:
    • 按边有无方向:无向图(边用 (u,v) 表示)、有向图(边用 < u,v > 表示,分入度 / 出度);
    • 按边有无权值:无权图、带权图(网);
    • 特殊图:完全图(无向图:n 个节点有 n (n-1)/2 条边;有向图:n (n-1) 条边)、稀疏图(边少)、稠密图(边多)。
  • 连通性:
    • 无向图:两点间有路径→连通;所有节点连通→连通图;极大连通子图→连通分量;
    • 有向图:两点间双向有路径→强连通;所有节点强连通→强连通图;极大强连通子图→强连通分量。
(2)图的存储结构(笔试常考对比)
存储方式特点适用场景
邻接矩阵用二维数组存储边(A [i][j] 表示节点 i 到 j 的边)稠密图(空间 O (n²),访问边效率 O (1))
邻接表用 “数组 + 链表” 存储(数组存节点,链表存邻接节点)稀疏图(空间 O (n+e),e 为边数,遍历邻接节点效率高)
(3)图的遍历(与树遍历对比)
  • 深度优先搜索(DFS):类似树的前序遍历,用栈 / 递归实现,“一条路走到底,回溯再走其他路”;
  • 广度优先搜索(BFS):类似树的层序遍历,用队列实现,“按层遍历,先访问当前节点的所有邻接节点”;
  • 考点:遍历序列推导、基于遍历判断连通性、找路径。

四、查找与排序

1. 查找:从数据集中找目标元素
查找算法适用结构平均时间复杂度特点
线性查找任意序列(数组 / 链表)O(n)简单,无需有序
二分查找有序数组(顺序存储)O(log₂n)高效,需有序 + 随机访问
二叉搜索树(BST)查找二叉搜索树O (log₂n)(平衡时)/ O (n)(失衡时)动态查找(支持增删),依赖树的平衡性
哈希查找哈希表O (1)(理想无冲突)最快,需解决冲突(开放地址法、链地址法)
2. 排序:将序列按规则排列
排序类别算法平均时间复杂度最坏时间复杂度空间复杂度稳定性(相同元素相对位置不变)
插入类直接插入排序O(n²)O(n²)O(1)稳定
希尔排序O(n¹.³)O(n²)O(1)不稳定
交换类冒泡排序O(n²)O(n²)O(1)稳定
快速排序O(nlog₂n)O(n²)O (log₂n)(递归栈)不稳定
选择类简单选择排序O(n²)O(n²)O(1)不稳定
堆排序O(nlog₂n)O(nlog₂n)O(1)不稳定
归并类归并排序O(nlog₂n)O(nlog₂n)O (n)(额外数组)稳定
基数类基数排序O (d (n+r))(d 为位数,r 为基数)O(d(n+r))O(n+r)稳定

http://www.dtcms.com/a/473872.html

相关文章:

  • 用python做购物网站万网搜官网
  • 创建qq网站如何做网站流量分析报表
  • Docker实战:从基础镜像到Nginx定制
  • 什么是NoSQL?
  • 北京网站建设公司代理备份整个网站
  • 宁夏做网站建设公司私人订制与定制
  • 在 Ubuntu 下开发鸿蒙应用:理解系统的最佳入口
  • RabbitMQ四种交换机详解
  • 几种最常见的病毒/恶意软件类型
  • PHP计算过去一定时间段内日期范围函数
  • 怎么看网站是什么程序做的产品推广的目的和意义
  • 摄像头软件参数调试详解与实战
  • DB-GPT:AI原生数据应用开发框架解析
  • 论文笔记(九十三)ManipulationNet: Benchmarking
  • AIX 服务器 CPU 长期 90%:从 nmon 画像到 DataStage 僵尸进程的定位与清理
  • 10_基础策略编程实现
  • 服装网站建设前景分析网站 不备案
  • 克隆网站模板网站正在建设中 模板
  • 【完整源码+数据集+部署教程】 葡萄病害检测系统源码和数据集:改进yolo11-CAA-HSFPN
  • deepseekmine2.2.0发布,本地知识库,秒级上传与检索文件,免费试用
  • JavaSE
  • 基于数据挖掘的银行贷款审批预测系统
  • 加大网站建设力度上海十大互联网公司
  • LeetCode 翻转对
  • Egg.js 完全指南:企业级 Node.js 应用框架
  • 矩阵的求逆
  • 网页设计做网站wordpress主题添加双备案号
  • 已有备案网站增加域名咸阳网站建设价格
  • go-swagger学习笔记
  • Blender硬面建模灯光渲染材质修改器纹理烘焙插件 Rantools And P-Cutter All-In-One Addon V3.3.10