【408考研】数据结构核心笔记:单链表与栈操作精髓总结


🚀 引言

在 408 考研数据结构中,线性表 与栈 是所有复杂数据结构(如树、图)的基石。今日复习重点在于攻克链表指针引用的底层逻辑 以及栈操作的边界条件。


一、 单链表(Linked List)基础与内存分配

1.1 结构体定义

在代码实现中,必须清晰定义结点结构。

cpp 复制代码
typedef struct LinkNode {
    int data;               // 数据域
    struct LinkNode *next;  // 指针域
} LinkNode;

1.2 动态内存分配

在 C 语言中使用 malloc 申请空间时,务必注意强制类型转换:

  • 示例 :p = (LinkNode *)malloc(sizeof(LinkNode));
  • 方法总结 :由于 malloc 返回 void* 类型,在 C++ 环境或严格的 C 编译器中,必须显式转换为 LinkNode* 才能适配目标指针。

二、 【核心方法】指针引用的"变"与"不变"

这是考研算法题中最容易丢分的地方。关于函数参数中 &L 与 L 的选择,可以总结为以下准则:

2.1 使用 &L(地址传递/引用)

  • 核心逻辑 :当函数内部操作会导致 L 的指向发生改变时。
  • 适用场景:
  • 初始化头结点(L 从 NULL 变为指向具体地址)。
  • 头插法/尾插法改变头指针。
  • 操作分类:增、删、改。

2.2 使用 L(值传递)

  • 核心逻辑 :当函数内部操作时 L 的指向保持不变,仅需访问或修改链表内部结点内容时。
  • 适用场景:
  • 遍历链表打印数据。
  • 按值查找、按序查找。
  • 操作分类:查、找、打印。

三、 单链表操作的"核心算法逻辑"

3.1 插入与删除操作

  • 插入逻辑(前驱/后继):
  1. 查找目标位置。
  2. 创建新结点 s。
  3. 指针调整(防断链) :s->next = p->next; p->next = s;
  • 删除逻辑:
  1. 查找待删结点的前驱 p。
  2. 暂存待删结点 q = p->next。
  3. 断链重连 :p->next = q->next;
  4. 释放内存 :free(q);

3.2 辅助操作

  • 单链表置空 :L->next = NULL;
  • 自增运算细节:
  • ++k:先执行 +1+1+1,再参与后续判断。
  • k++:先参与当前判断,执行完毕后再 +1+1+1。

四、 栈(Stack)专题:合法性与实现差异

4.1 出栈序列合法性(卡特兰数)

当 nnn 个不同元素依次入栈时,合法的出栈序列个数通过卡特兰数(Catalan)计算:

Cn=1n+1C2nnC_n = \frac{1}{n+1} C_{2n}^{n}Cn=n+11C2nn

4.2 顺序栈的两种实现对比

栈顶指针 top 的初始定义不同,直接影响入栈与出栈的代码实现:

栈顶指针指向 初始化状态 入栈操作 (Push) 出栈操作 (Pop)
指向栈顶元素 top = 0 S[++top] = e e = S[top--]
指向栈顶上方空位 top = -1 S[top++] = e e = S[--top]

五、 408 考纲重难点分布预测

根据复习心得,数据结构各章节在算法大题中的分值占比大致如下:

  • 数组(线性表应用) :50-60%(核心大题高发区)
  • 链表 :30%
  • 树与图 :20%

考研复习是一场苦修,但脚踏实地走过的每一步,都是你最坚固的护城河。

如果今天的复盘对你有启发,欢迎 一键三连(点赞、收藏、评论) 支持一下!

相关推荐
写后端的胖头鱼1 小时前
一文详解B+树原理(附场景+示例)
数据结构·b树
陈卫军老师3 小时前
陈卫军语录全集总结:12句话,一条主线
经验分享·笔记
爱吃奥利奥_wen4 小时前
面向对象三板斧:封装、继承、多态,到底在“装“什么、“承“什么、“变“什么?
开发语言·经验分享·c#
All for pursuit.4 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
xxwl5856 小时前
数据结构知识点和代码实现总结(C语言实现)
c语言·开发语言·数据结构
2501_926978337 小时前
给自指系统接一个外部锚 —— 一个关于「用 AI 观察自己」的方法
人工智能·经验分享·笔记·机器学习·ai写作
AOI小白新手上路11 小时前
anomalib 缺陷检测复现笔记:从跑通库到 EfficientAD 落地
人工智能·笔记·机器学习
mokongJ11 小时前
17 份异构销售数据的合并清洗方案:30 万行处理耗时 9.64 秒
数据结构
xxwl58511 小时前
RabbitMQ 学习笔记
笔记·学习·rabbitmq
蛋蛋的就会顺顺的12 小时前
hot100——二叉树
java·数据结构·算法·leetcode·力扣