由于路径依赖比较麻烦,直接把整个 codeblocks(V17.12) 工程上传了,直接打开 WD_DS.workspace。
各章节习题放在各章节文件夹中,各种数据结构的基本实现放在单独的文件夹中,供习题调用。
为了练习 C/C++ 的各种特性,不同的章节用了不同的实现方式,有些地方不能完全按照王道书上的方式实现。例如,链表中把结点结构体放在了 private 域,导致习题中不能使用结点指针访问的方式,只能通过序号调用,这样就造成有些习题的效率很低(其实只要把结点结构体放到 public 域就可以解决这一问题,这里也是逼着自己再用指针方式实现一遍吧)。后面如果有时间,二刷数据结构的时候再用《王道》的指针方式实现一遍(已实现)。
章节
-
chapter2 —— 第二章习题
- 在 main 文件中用宏选择编译哪一节
- chapter2_2 全部完成,题目实现放在 chapter2_2.cpp
- chapter2_3 题目实现放在 chapter2_3.cpp 中,只完成一小部分,主要放在上级 chapter2_3 中实现
-
chapter2_3 —— 第二章 第 3 节习题
- 题目实现放在 chapter2_3_wd.cpp 中
- chapter2 中 2.3 节使用的链表结点设为 private 属性,不能使用结点指针访问结点,所以算法实现很浪费时间,这里单独将链表结点设为 public 属性,使用与《王道》类似的指针方式实现,类定义在 linked_list/linked_list_wd.h 中
-
chapter3 —— 第三章数据结构实现
- 本节题目无须代码实现,所以这里只做代码测试。内容包括:
- 顺序栈(完成)
- 顺序队列(完成)
- 链栈(完成)
- 链队(未完成)
- todo
- 中缀表达式转后缀表达式(栈)
- 由后缀表达式计算表达式的值(栈)
- 括号匹配(栈)
- 本节题目无须代码实现,所以这里只做代码测试。内容包括:
-
chapter4 —— 第四章数据结构实现
- todo
- 二叉树的四种遍历算法(完成)
- 先序、中序、后序遍历的非递归算法(借助栈)(完成)
- 建立线索二叉树
- 线索二叉树的遍历
- todo
数据结构
-
sequence_list —— 顺序表(大部分用 C 语言风格实现,使用函数和结构体)
- 需要手动修改数据类型的类型转换(typedef),在 .h 文件
-
linked_list —— 链表(完全用 C++ 风格实现,使用类)
- 没有使用模板类,需要手动修改数据类型的类型转换(typedef),在 .h 文件
- 各种类型链表都在这里实现
- 目前只实现了带头结点的单链表和不带头结点的单链表,循环链表(带或不带头结点),循环双链表(带或不带头结点)都只预留了定义,暂未实现
-
linked_list_wd 文件中将链表结点设为 public 属性,与《王道》方法类似
-
sequence_stack —— 顺序栈(用 C 语言风格实现,使用函数和结构体)
- 需要手动修改数据类型的类型转换(typedef),在 .h 文件
-
sequence_queue —— 顺序队列(用 C 语言风格实现,使用函数和结构体)
- 需要手动修改数据类型的类型转换(typedef),在 .h 文件
-
linked_stack —— 链栈
-
linked_queue —— 链队
-
binary_tree —— 二叉树
- 使用模板类
-
部分代码借鉴自清华邓俊辉老师的课程配套代码
其他
- test_set —— 测试数据集
- 为方便题目测试数据的输入及管理,使用文件读取的方式获取测试数据。