↓ 跳过正文

Algorithms & Data Structures Labs — 数据结构课程实验

项目概览
#

Algorithms & Data Structures Labs 是一个公开的算法与数据结构实验仓库。它不是一个小练习,而是一组独立的 C#/.NET 控制台项目。项目中的基础 ADT 都是手动实现的,不依赖 List<T>、Dictionary<TKey,TValue>、Stack<T>、Queue<T> 或其他内置集合。

具体仓库: github.com/pistaha/algorithms-data-structures-labs

main 分支作为导航页使用,每个实验保存在独立分支中。每个实验都有自己的项目、README、源代码和包含原始任务的 docs/task.txt。

项目展示的能力
#

  • 通过公共接口和不同内部表示设计 ADT;
  • 数组存储、链式结构、游标位置和手动关系管理;
  • 手动实现栈、队列、列表、map/dictionary 和哈希表;
  • 使用 separate chaining、closed hashing 和 linear probing 处理冲突;
  • 带有失败情况检测的拓扑排序;
  • 使用 multilist 和两个环形链表建模多对多关系;
  • 通过确定性的控制台演示在本地验证算法行为。

实验列表
#

分支 主题 实现内容 链接
lab1 List ADT 双向链表、基于游标的列表、通讯录记录去重 打开分支
lab2 Stack / Queue / Map ADT 数组栈、链式栈、基于列表的栈、数组队列、环形队列、linked-list map 打开分支
lab3 Dictionary ADT 开放哈希、闭合哈希和线性探测 打开分支
lab4 Partial Order / Topological Sort 依赖关系存储、拓扑排序和无法排序情况检测 打开分支
lab5 Student-Course Multilist 学生/课程哈希表,以及双向多对多注册节点 打开分支

分支说明
#

lab1:List ADT
#

第一个实验比较同一个抽象列表的两种实现:双向链表和基于数组的游标模型。演示任务用于删除通讯录中的重复记录,记录字段以固定长度 char[] 保存。

关键文件:

  • algo 1/dvus.cs;
  • algo 1/curs.cs;
  • algo 1/AddressBookEntry.cs;
  • algo 1/Program.cs。

lab2:Stack、Queue、List 和 Map
#

第二个实验扩展了 ADT 集合,并用不同存储策略实现相同行为。栈通过数组、链式节点和自定义列表实现;队列通过数组、环形链式结构和列表实现;同时还包含支持赋值、查找和打印的 linked-list map。

lab3:Dictionary ADT 和哈希
#

第三个实验关注基于哈希表的 dictionary/set 行为。项目包含带冲突链的开放哈希,以及带线性探测的闭合哈希。演示使用 goodguys 和 badguys 两个集合,通过命令修改和查询姓名状态。

演示命令:

  • F name:把姓名移动到正向集合;
  • U name:把姓名移动到负向集合;
  • ? name:查询状态;
  • P:打印两个集合;
  • E:退出。

lab4:偏序关系和拓扑排序
#

第四个实验在可能的情况下把偏序集合转换成线性顺序。x < y 这样的约束以整数对保存,然后转换成内部依赖结构。算法逐步选择可以放入结果的元素,并检测无法构造线性顺序的情况。

lab5:学生-课程 multilist
#

第五个实验在没有数据库和集合框架的情况下建模多对多关系。学生和课程分别存储在闭合哈希表中,每个注册记录都是一个节点,同时存在于两个环中:某个学生的课程环,以及某门课程的学生环。

支持的操作:

  • 添加学生到课程;
  • 从某门课程移除学生;
  • 从所有课程移除学生;
  • 从课程中移除所有学生;
  • 输出某门课程的所有学生;
  • 输出某个学生的所有课程。

工程细节
#

这个仓库的价值在于数据结构是低层级手动实现的。代码中可以直接看到数组边界、Full / Empty 状态、节点删除、类似指针的遍历、冲突处理,以及 multilist 中两个方向关系的一致性维护。它补充了作品集中 full-stack 和 backend 项目之外的算法基础。

技术栈
#

  • C#;
  • .NET 8 / .NET 10;
  • 控制台应用;
  • 不使用内置集合的手动 ADT;
  • 使用 Git 分支保存不同实验项目。

运行
#

git clone https://github.com/pistaha/algorithms-data-structures-labs.git
cd algorithms-data-structures-labs

git switch lab1
dotnet run --project "algo 1/algo 1.csproj"

git switch lab3
dotnet run --project "algo3/algo3.csproj"

git switch lab5
dotnet run --project "algo 5/algo 5.csproj"

结果
#

该仓库为作品集增加了独立的算法与数据结构方向。它展示的不只是应用开发能力,还包括 ADT、哈希、图式依赖关系,以及内存中关系建模的基础能力。