# 数据结构课程(中国,2026)– 中文版

Koczka Ferenc 博士 · 埃斯特哈齐·卡罗伊大学(Eszterházy Károly Egyetem)
16 周 · 每周 2 学时讲课 + 2 学时实践课 · Java 和 Go · 第 16 周期末笔试和上机考试

## 教学大纲

| 周 | 主题 | 幻灯片 |
|---|---|---|
| 1 | 绪论、数据与基本数据类型、数据结构的分类 | `01_introduction` |
| 2 | 效率(大O记号)、顺序查找与二分查找 | `02_efficiency_searching` |
| 3 | 数组、地址计算、矩阵、动态数组 | `03_arrays` |
| 4 | 字符串、编码(ASCII、Unicode、UTF-8)、模式匹配 | `04_strings` |
| 5 | 排序 I:冒泡排序、选择排序、插入排序 | `05_sorting_1` |
| 6 | 集合:位向量、无序表示和有序表示 | `06_set` |
| 7 | 栈、后缀表达式 | `07_stack` |
| 8 | 队列、循环队列、双端队列、优先队列 | `08_queue` |
| 9 | 动态内存模型、单链表 | `09_linked_list` |
| 10 | 带哨兵的链表、双向链表、循环链表 | `10_sentinel_doubly_list` |
| 11 | 链栈与链队列、哈希表 | `11_dynamic_stack_queue_hash` |
| 12 | 递归 | `12_recursion` |
| 13 | 排序 II:归并排序、快速排序 | `13_sorting_2` |
| 14 | 树、二叉树、存储表示、遍历 | `14_trees` |
| 15 | 二叉搜索树、平衡、堆、总结 | `15_bst_heap` |
| 16 | 期末笔试和上机考试 | `dolgozat/`、`practical/` |

每套幻灯片的结构相同:复习 → 讲课(伪代码、Java、Go、图示) → 小结 → 复习题 → **实践课**(示例程序、练习、课后作业)。答案和时间安排以教师注释(`<!-- … -->`)的形式写在源文件中 – PDF 中不显示。

## 文件夹

| 文件夹 | 内容 |
|---|---|
| `cn/diak/` | 幻灯片的 Markdown 源文件 |
| `cn/diak/kepek/` | 图示(SVG)– 由 `eszkozok/abrak_hXX.py cn` 生成 |
| `cn/diak/tema/kurzus.css` | 幻灯片主题(含中文字体) |
| `cn/code/java/wXX/` | Java 示例程序和练习答案(`ExercisesXX.java`) |
| `cn/code/go/wXX/<程序>/` | Go 示例程序和答案(`wXX/exercises`) |
| `cn/dolgozat/` | 期末笔试(A 卷)和参考答案,A4 主题 |
| `cn/practical/` | 上机考试:题目、评分指南、初始代码(`java/`、`go/`) |
| `cn/practical/solution/` | 上机考试的参考答案 – **不要发给学生!** |
| `cn/pdf/` | 生成的全部 PDF |

程序中的注释是中文的,程序的输出是英文的(这样在 Windows 控制台上不会出现乱码)。

## 运行程序

```bash
# Java(建议 JDK 21,至少 JDK 17):单个文件,无需单独编译
cd cn/code/java/w07 && java Postfix.java

# Go(1.23+):在 go 文件夹中运行
cd cn/code/go && go run ./w07/postfix
```

**注意(Windows,JDK 17):**源文件是 UTF-8 编码的,其中有中文注释。JDK 18 及以后的版本默认使用 UTF-8,没有问题。在默认编码为 GBK 的中文 Windows 上使用 JDK 17 时,请这样编译:`javac -encoding UTF-8 Postfix.java`,然后 `java Postfix`。

## 生成 PDF

```bash
./build.sh                                  # 所有幻灯片、试卷和题目(hu、en、cn)
./build.sh cn/diak/01_introduction.md       # 单个文件
python3 eszkozok/abrak_h07.py cn            # 重新生成某一周的图示
python3 eszkozok/cn_tipografia.py cn/diak/01_introduction.md   # 中文标点和粗体的后期处理
python3 eszkozok/cn_kod.py                  # 由英文版程序生成中文注释的程序
```

前提:`brew install marp-cli`,Firefox,以及中文字体(macOS 自带 PingFang SC;Windows 上使用 Microsoft YaHei)。
