C++双向链表入门实例与操作详解

需积分: 9 4 下载量 18 浏览量 更新于2024-11-10 收藏 28KB DOC 举报
本文档主要针对初学者讲解了如何在C++中实现双向链表的具体实例,并提供了一个修复后的代码片段。双向链表是一种数据结构,其中每个节点包含指向前后两个节点的指针,这使得数据可以在链表的任意方向上进行插入和删除操作。以下是文档中的关键知识点: 1. **双向链表基础概念**: 双向链表不同于单链表,每个节点不仅有一个指向前一个节点的指针(prev),还有一个指向下一个节点的指针(next)。这种结构允许更灵活的数据访问,尤其是对于需要频繁从两端插入和删除元素的情况。 2. **C++类定义**: 文档中的`Goods`类是一个双向链表的节点,包含了重量(weight)、总重量(total_weight)以及指向前后节点的指针(next和prior)。`Goods`类的构造函数接受一个整数参数(w),用于初始化节点的重量,并更新总重量。析构函数则在删除节点时减去其重量。`Weight()`函数返回当前节点的重量,而`TotalWeight()`函数是静态成员函数,用于获取整个链表的总重量。 3. **错误修复示例**: 提供的代码展示了`purchase`和`sale`函数,分别用于在链表尾部添加新商品(购进)和头部移除商品(售出)。原始代码中的`if(p==NULL)`检查被注释掉,这是因为在引入虚元(一个特殊的、不存储任何数据的节点)后,链表的开始不再是`NULL`,而是始终指向虚元,因此无需进行额外的条件判断。 4. **初始化链表函数**: `Begin`函数负责创建一个只包含一个虚元的空表,通过动态内存分配创建一个新的`Goods`对象,并将前后指针都指向这个虚元,从而形成一个有效的双向链表起始结构。 5. **主程序流程**: 主函数中使用循环让用户选择购买、销售或退出操作。每次操作后,都会调用相应的函数并更新显示当前的总重量。最后,当用户输入0时,程序结束。 本文档通过实例展示了如何在C++中构建一个双向链表,包括节点类的设计、基本操作函数的实现以及链表的初始化和操作流程。这对于初学者理解和实践双向链表的使用具有重要意义。