♻️ 资源
大小: 24.9MB
➡️ 资源下载: https://download.csdn.net/download/s1t16/87425414
基于C语言实现线性表的建立、插入、删除、查找等基本操作
部分算法实现设计说明
分别以单链表、循环链表、双向链表为例,实现线性表的建立、插入、删除、查找等基本操作。
要求:能够把建立、插入、删除等基本操作的过程随时显示输出来。
软件功能
- 功能分为四部分。第一部分是功能选择模块,通过 QT 中的下拉式菜单栏完成。
- 后面三部分为主题功能模块,分别为单链表,循环链表和双向链表的基本操作实现。
单链表:
- 建立一个带头结点的空单链表
- 逐步演示插入指定元素值至指定位置
- 逐步演示随机插入 3 个节点至单链表的尾部
- 逐步演示从单链表中指定删除节点的位置进行删除
- 逐步演示输入查找值得到元素在单链表中的位置序号
- 销毁单链表
- 状态栏提示
循环链表:
- 建立一个带头结点的空循环链表
- 逐步演示插入指定元素值至指定位置
- 逐步演示随机插入 3 个节点至循环链表的尾部
- 逐步演示从循环链表中指定删除节点的位置进行删除
- 逐步演示输入查找值得到元素在循环链表中的位置序号
- 销毁循环链表
- 状态栏提示
双向链表:
- 建立一个带头结点的空双向链表
- 逐步演示插入指定元素值至指定位置
- 逐步演示随机插入 3 个节点至双向链表的尾部
- 逐步演示从双向链表中指定删除节点的位置进行删除
- 逐步演示输入查找值得到元素在双向链表中的位置序号
- 销毁双向链表
- 状态栏提示
- 以上所有功能均通过面向对象的设计方法实现,并且结合了 QT 的开发框架,逐步演示等功能均通过函数调用与 ui 绘制结合实现
设计思想
为了达到 UI 界面的美观性,本次软件实现采用的是 QT 的开发框架。由于 QT 有完善的 ui 布局设计组件,我先设计了软件应该包含的功能并将四个 ui 界面初步地设计完成。接着开始完成代码逻辑部分的实现,我采用了自顶向下的分析方法。本题中的功能均是对于链表的操作,作为数据结构中最为基础的结构,当时学期中我们已经完成了控制台界面的程序编写,因此我已经非常熟悉了。我需要做的就是在当时程序的基础上,实现 ui 界面的同步跳转与显示逻辑。第一部分的功能选择仅需要通过选择框即可实现,重点在后续的三个功能中。由于这三种结构实现的功能几乎一致,只需要完成其中一个,其他两个即可轻松完成。
以单链表为例,单链表由各个节点组成,将节点提炼成一个节点类,通过对这些节点类的插入删除操作构成一个完整的单链表类。循环链表与双向链表稍作修改即可实现类似的功能。
图形化显示链表需要通过画图的方式,分为节点本身的图形,箭头与箭头连接线几个部分,分块实现各自的功能函数即可。
在代码编写的过程中,由于对代码结构理解的加深,需要对 ui 界面进行一些的微调从而最终完成软件的设计。
算法流程图如下:

逻辑结构与物理结构
逻辑结构均为线性结构,物理结构均为链式存储结构,相对于顺序存储更加灵活。
单链表
节点定义:

单链表类定义:

循环链表
节点定义:同单链表
循环链表类定义:

双向链表
节点定义:

双向链表类定义:

开发平台
CPU:i7-8750H
内存:16GB
操作系统:Windows10 专业版 ver1909
主体开发语言:C++(支持 C++11)
开发框架:Qt
开发环境:Qt 5.14.2
编辑器:Qt Creator 4.11.1(主要代码编写)&&VS Code(resource 目录编辑和部分代码编写)
编译器:MinGW 32bit
运行环境:代码版本使用上述集成环境可正常编译运行,使用 windeployqt 整合生成的可执行文件版本可在 windows 环境的机型下正常运行。
系统的运行结果分析说明
调试与开发的过程
在 Debug 过程中,通过给需要测试的代码段添加断点、逐步运行并观察各变量值的变化情况可以找出错误的原因,也可以使用 Qt 库中的 qDebug()在应用输出界面对需要观察的变量打印从而发现错误。总体而言,与过去我们使用 VisualStudio 等等开发工具调试的方式区别不大。
开发的时候,由于新增了 UI 界面,通过运用 Qt 的槽与信号机制可以完成代码与用户接口的链接,从而完成开发工作。通过功能完成 UI 的设计是第一步工作,接下来通过对 UI 开放的各种接口完成对内容的填充。
开发软件的成果
正确性:软件在不同测试路径下均可以正常运行,顺利完成了设计的所有的黑盒与白盒测试。
稳定性:程序在各种环境下均可以稳定运行,对于涉及到的诸如文件路径,图形大小等等均使用宏定义在头文件呈现,方便后续的代码修改。由于设计时选择功能之后新建窗口进行功能演示,所以可以同时打开多个窗口运行。同时打开三种链表(同一种链表只能打开一个窗口)也不会互相干扰。
容错能力:本程序的容错能力比较不错。1、 对于按钮进行了设计,在需要按钮操作的时候才会处于有效状态,其余状态下按钮变暗无法点击。2、 在插入、删除的时候,通过位置下拉框进行限定,保证了操作的合法性。3、 限定输入框的 ASCII 码范围,仅接受数字输入(负号仅允许开头出现且最多出现一次)
唯一出现问题的是当连续快速点击删除节点时,当点击删除的次数超过剩余节点数,可能会导致系统的崩溃。
运行结果
功能选择界面

单链表进入界面

随机尾插三个节点界面

删除选择界面

插入节点界面

查询失败界面

查询成功界面

循环链表创建界面

双向循环列表创建界面

其余双向链表与循环列表界面与对应单链表相同操作界面类似,限于篇幅原因在此不做展示。
操作说明
Qt 编译运行(注意代码路径中不能包含中文,否则无法正常编译运行)
双击项目文件打开项目

单击左下角运行按钮运行程序(接下来步骤与运行版相同)

运行版
双击运行程序

(Qt 编译运行与直接点击运行版运行之后步骤均相同)进入功能选择界面

选择对应的功能,单击即可进入(下面所有演示均以单链表功能进行,循环链表与双向链表功能类似,操作步骤可以此类推)

进入之后初始界面如图

点击创建进行创建链表操作,同时软件提示创建成功

选择插入位置并输入插入的元素值,点击插入按钮

结果如图

点击尾端随机三个,随机插入三个节点在链表尾部(插入过程中通过节点颜色变化可以观察链表操作的实现步骤)

选择删除位置,点击删除按钮

显示刚刚删除的节点的元素值,原表节点被删除

输入需要查找的值,点击查找,各节点依次查找并显示结果(下图为未找到的情况)

下图为查找到的情况

在需要执行的操作结束后,可以点击清空对链表进行释放

链表的所有功能均已展示完毕,各功能顺序可自行设计,所有非法行为均已提前在软件逻辑层面拒绝。
双向链表与循环链表与单链表的演示步骤几乎完全相同,篇幅原因在此不做展示,用户可自行使用。