1.1 系统进程统计 [链表]
1.1.1 题目内容
1.1.1-A [问题描述]
设计一个程序,每秒统计一次当前系统的进程状况,并按照内存使用自多到少排序打印输出相关信息。对已经结束的进程,另外给出一个列表,并显示该进程的结束时间和持续时间。
1.1.1-B [基本要求]
(1) 该题目要求使用两个链式线性表。一个链表存储当前活动进程,要求使用单向链表,并按照内存使用自多到少排序。另外一个链表存储已结束进程,要求使用双向链表,按照持续时间自少到多排序。
(2) 每秒在窗口内更新一次当前系统进程情况,输出内容包括:进程名,持续时间,内存使用情况。
(3) 每秒在窗口内更新一次已结束进程情况,输出内容包括:进程名,持续时间,结束时间。
(4) 注意进程在这两个链表中的切换,一个进程既可被结束,也可以过一段时间后再被运行。
1.1.2 算法思想
这段代码的主要思路是通过调用 Windows API 不断获取系统中的进程信息,并记录下这些进程的内存使用情况、持续时间等信息,然后对比前后两次获取的进程信息,找出已结束的进程并记录其结束时间和持续时间,把它们存放在CreateEndedList 函数创建的已结束进程链表中。UpdateProgarm 函数用于刷新后更新进程,通过比对当前进程链表和已结束进程链表,找出新的进程并添加到当前进程链表和已结束进程链表中,并通过SortDList 和 SortSList 函数分别对当前进程链表和已结束进程链表按照内存大小和结束时间进行排序。最后,通过 ShowArray_D 函数将当前进程链表和已结束进程链表的信息显示出来,包括进程名、PID、内存使用情况、持续时间和结束时间。
在结果显示方面,为了实现良好交互的界面,通过Set_Color函数来控制字体颜色,当前进程中的信息为绿色,已结束进程中的信息为红色,便于区分。使用Sleep(1000)来实现每过1s获取一次当前进程,使用system("cls")来实现清屏,结合它们来实现了每秒在窗口内更新一次已结束进程情况的动态刷新的要求。
1.1.5 测试数据与运行结果
1.1.5-A 测试数据
无输入!
1.1.5-B 运行结果
源码地址:GeekclubC/Course-Design-of-Data-Structure: 用C++完成的数据结构课程设计 (github.com)