第一部分 算法实现设计说明
1.1 题目
分别以单链表、循环链表、双向链表为例,实现线性表的建立、插入、删除、查找等基
本操作。
要求:能够把建立、插入、删除等基本操作的过程随时显示输出来。
1.2 软件功能
对于单链表、循环链表和双向链表,均能实现以下功能:
(1)线性表的建立,建立一个带头结点的空链表;
(2)线性表插入操作,输入插入索引与插入元素值,将元素插入到链表指定位置;
(3)线性表删除操作,输入删除元素的索引,删除该位置的元素;
(4)线性表查找操作,输入要查找的元素值,返回第一个等于该值得元素索引;
(5)线性表修改操作,输入要修改的索引与修改后的值,修改线性表对应元素;
(6)能够对各种特殊情况如索引不合法等进行判断并给出提示。
1.3 设计思想
根据题意,需要对不同链表进行同样的几项基本操作,实现标准交互式图形界面,可以
分为算法设计和界面设计两部分。
算法设计方面:对于单链表,本程序链表的建立采用带头结点方式,即每次建立链表都
动态申请一个头结点,头结点的后继是 NULL;链表的插入操作需要从头遍历链表,在指定
索引处修改插入位置前驱结点的 next 指针指向新结点,新结点的 next 指针则指向该位置原
结点;链表的删除操作同样需要从头遍历链表,将指定索引处结点的前驱结点的 next 指针
修改为指向该结点的后继结点,并删除当前结点即可;链表的查找操作需要从头遍历链表比
较当前访问元素与要查找元素是否相等,若相等则返回索引,若访问完整个链表都找不到相
同的元素,则提示查找失败;链表修改操作无需改变链表长度,从头遍历链表找到对应位置
元素修改其值即可。循环链表和双向链表的相关操作基本同单链表,不同的是循环链表最后
一个结点的 next 指针指向头结点,双向链表除了指向元素后继的 next 指针还有指向元素前
驱的 prior 指针。三种链表的实现有所不同,但对于本程序的场景体现不出三种链表的差异。
界面设计方面:可以利用 QT 框架添加按钮、选择框、文本展示框等控件,将三种链表
的五项基本操作整合到一个界面中。
1.4 逻辑结构与物理结构
本程序对三种链表进行操作,逻辑结构是顺序结构,物理结构是链式结构,具体结点定
义与三种链表的定义如下图所示: