在C++程序设计的第一章中,涉及了一个关于工作备忘录生成的编程题目,主要目标是根据工作记录数据结构实现一个功能。题目要求你创建一个程序,处理用户输入的工作任务列表,其中每个任务包括工作名称、开始时间和结束时间。任务需按照开始时间排序,并检测是否存在冲突(即在同一时间段内有多项工作)。如果有冲突,应在冲突的工作名称前添加星号(*)。
函数接口部分:
1. `Node* add(Node*, Node*)`: 这是一个链表操作函数,用于将新任务添加到已有的工作列表中。它接受两个Node指针作为参数,一个是当前节点,另一个是要插入的新节点。这个函数应该考虑链表的结构,确保新任务被正确插入到链表的相应位置。
2. `void display(Node*)`: 这个函数用于遍历并打印工作列表,展示所有任务及其开始和结束时间。在输出时,它会调用`check()`函数来检查冲突情况。
3. `bool check(Node*)`: 这个辅助函数用于判断工作列表中的冲突。它采用递归方式,检查当前节点和下一个节点的时间关系。如果当前节点的开始时间大于下一个节点的开始时间,则返回`false`,表示存在冲突。如果链表为空或只有一个节点,或者没有冲突,返回`true`。
主程序部分:
- 用户首先输入工作记录的数量,即任务的数量。
- 接着,循环读取每项任务的信息,包括名称、开始时间和结束时间,然后将这些信息封装成`Node`对象,并将其添加到链表的头部。
- 使用`check()`函数检查链表是否包含冲突。如果有冲突,输出错误信息"ERROR"。
- 最后,调用`display()`函数显示完整的工作备忘录,包括有冲突的任务。
输入示例:
输入四个任务:
- aaa,开始时间1920,结束时间2000
- ccc,开始时间1692,结束时间2000
- ddd,开始时间1531,结束时间1700
- bbb,开始时间无冲突
输出结果会按照开始时间顺序展示,如果有冲突,如bbb与ccc,输出格式为`*bbb 开始时间 结束时间`,以此类推。
通过这个题目,学生可以复习C++中的链表操作,时间复杂度分析,以及条件判断和递归等概念,并熟悉如何处理和展示数据结构中的冲突问题。