Evanalysis
1.1有来源支持嵌入式互动预计阅读时间: 1 分钟

1.1 ADT 操作:stack、queue 与 function pointer

先定义操作契约,再追踪 stack/queue 状态转移,最后理解 C 语言 function pointer 的操作分派。

笔记系列

CSCI2520:资料结构

针对 CSCI2520 资料结构基础的结构化笔记,重视操作层级推理与选择性互动示范。

章节 1

ADT 与操作语义

由 ADT 规格走向 stack/queue 实作中的操作行为。

章节 2

复杂度与排序

渐进增长、成本比较与面向排序的复杂度推理。

为什么先谈 ADT 契约

资料结构课最容易出错的地方,不是语法,而是操作语义。ADT 先规定 “能做什么、做完要保证什么、错误情况如何处理”,然后才选实现(array 或 linked list)。

Stack 操作语义

定义

Stack 核心操作

  • push(x):把 x 放到栈顶。
  • pop():移除并返回栈顶元素。
  • top():读取栈顶但不移除。
  • isEmpty():检查是否为空。

LIFO 是核心不变量:后进先出。

Queue 操作语义

定义

Queue 核心操作

  • enqueue(x):从尾端加入 x
  • dequeue():由前端移除并返回。
  • front():读取前端但不移除。
  • isEmpty():检查是否为空。

Queue 的不变量是 FIFO:先进先出。

C 语言 function pointer 操作分派

把 ADT 操作函数放进 function-pointer table,可在不改 client call-site 下切换实现。这是 C 中常见的接口稳定策略。

边读边试

追踪 ADT 操作语义

此步进器按操作展示状态转移,让你可直接核对 ADT 契约。

行变换: push(10)

stack: [10]

queue: []

栈顶现为 10。

常见错误

常见错误

把 stack/queue 语义混用

函数名叫 queue,但行为做成 LIFO,属于契约破坏。

常见错误

忽略空结构前置条件

对空 stack 做 pop、对空 queue 做 dequeue,必须明确错误策略。

快速检查

快速检查

push(1), push(2), pop() 后 stack 剩下什么?

按 LIFO 判断。

解答

答案

快速检查

enqueue(4), enqueue(7), dequeue() 会返回什么?

按 FIFO 判断。

解答

答案

先备知识

这一节可以独立阅读。

本单元重点词汇

本系列更多笔记