数据结构实验报告主要聚焦于图的存储和遍历算法,其中包含了多个具体的知识点:
1. **图的存储思想**:图的存储通常有两种方式,邻接矩阵和邻接表。在邻接矩阵中,图的每个顶点都有一个数组对应,数组的每个元素表示与该顶点相连的其他顶点是否存在边。而在邻接表中,每个顶点有一个链表,链表中的节点代表与其相邻的顶点。实验中使用了邻接表,因为它对于稀疏图(边数远小于顶点数的平方)更节省空间。
2. **邻接表的实现**:邻接表由一个数组(或链表)组成,每个元素代表图的一个顶点,包含一个指向链表的指针。链表中的每个节点表示一条边,节点包含与当前顶点相邻的顶点的信息,如边的权值等。
3. **深度优先遍历(DFS)**:从某一个顶点开始,沿着边向下搜索,直到不能再深入为止,然后回溯到上一个顶点,继续搜索未访问过的顶点。在邻接表中,DFS可以采用递归或栈来实现。实验中要求实现无向图的DFS。
4. **广度优先遍历(BFS)**:从某一个顶点开始,先访问所有与其相邻的顶点,再访问这些顶点的相邻顶点,依此类推。BFS通常使用队列来辅助实现。实验中要求在邻接表基础上实现无向图的BFS。
5. **顶点的度计算**:在图中,顶点的度是与其相连的边的数量。对于有向图,度分为出度(发出的边数)和入度(接收的边数)。实验中要求计算所有顶点的度并输出。
6. **拓扑排序**:对于无向图,拓扑排序是将图的顶点排成线性序列,使得图中任意一对顶点u和v,如果存在边uv,则u在序列中出现在v之前。在有向无环图(DAG)中,拓扑排序是可能的。实验要求实现有向图的拓扑排序序列。
7. **菜单驱动的程序设计**:为了提高用户交互性,程序设计了一个简单的菜单,让用户选择执行不同的图算法,如建立邻接表、输出邻接表、计算顶点度、进行拓扑排序等。
源代码部分展示了队列的链式存储结构及其操作,如初始化队列、插入元素(EnQueue)、删除元素(DeQueue)等。这些是实现BFS的关键数据结构,因为BFS需要按顺序访问所有相邻节点。
实验通过这些内容让学生理解和掌握图的基本概念、存储结构以及遍历算法,同时锻炼了实际编程能力。通过这个实验报告,学生可以深入理解图的理论知识,并将其应用于实际问题中。