跳转至

欢迎来到 Moita's Programming Blog

简单线性链表

一个轻量级的整数线性链表实现,提供头插法建表、指定位置插入与删除、数组批量导入等功能。

原代码存在三处缺陷:listinsert 分配结点后未链入链表;listdelete 分配了无用结点造成内存泄漏,且被删元素无法回传;两函数的位置越界判断有误。以下给出修正后代码。

二叉树的链式存储与遍历

介绍二叉树的链式存储结构,以及前序、中序、后序三种遍历的递归与非递归(栈)实现。原代码的非递归前序遍历缺少空树判断和栈顶复位,另外整体缺少释放函数。

图的邻接表存储结构

实现有向图的邻接表存储,支持从控制台输入建图、查询指定顶点的出度与入度。原代码缺少销毁函数,arcnode 中未找到目标顶点时直接用 '#' 当哨兵值不够健壮。

图的邻接多重表存储结构

实现无向图的邻接多重表,每条边用一个结点表达、同时链入两个顶点的边链表。支持建图、插入边、删除边、打印边集与销毁操作。

原代码存在三处缺陷:locatevex 的未找到判断永远不成立;initmarks 边遍历被 mark==1 条件截断;deletedn 逐边调用 deleteedge 可能重复释放。以下给出修正后代码。

图的十字链表存储结构

实现有向图的十字链表存储,每个顶点通过 firstinfirstout 分别串起入弧和出弧。支持建图、查询入度/出度与销毁操作。

原代码的 locatevex 未找到判断与上一篇邻接多重表相同——i > vexnum 在循环上限恰为 vexnum 时永不为真。此外 createdg 缺少弧顶点有效性校验,main 中查询顶点与测试数据大小写不一致。