算法设计与分析——医疗队列——华东师范大学2020机试题A——erase使用容易出现野指针
2021/8/4 22:09:34
本文主要是介绍算法设计与分析——医疗队列——华东师范大学2020机试题A——erase使用容易出现野指针,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 题目描述
- 思路分析
- 实现源码
- 事故现场
- 分析与总结
题目描述
思路分析
- 这个读题目就有点困难,其实就是的一个链表元素的移动和读取
- 命令一:就是将首元素移动到末尾
- 命令二:就是将特定的元素移动到开头
- 命令三:就是将查看当前的队首元素
- 使用STL库中的list即可操作,但是我看了人家的介绍,如果使用这个,可能会出现部分样例超时,如果我自己定义一个简单的链表那?能省时间吗?不知道。
实现源码
#include <iostream> #include <list> using namespace std; /* * 描述:解决医疗队列的具体程序 * 参数:n命令的数目 * p排队的人数 * 返回:无返回值,通过输出决定命令的执行效果 * 注:命令直接通过控制台进行输入 */ void medicalQueue(int n,int p){ //声明一个队列,用来保存所有的病人 list<int> people; for (int i = 1; i <= p; ++i) { people.push_back(i); } //循环遍历所有的命令 int command; for (int i = 0; i < n; ++i) { cin>>command; //遍历所有的指令,根据指令跳转到不同的情况 if(command == 1){ //将队首的元素移动到末尾 int temp = people.front(); people.pop_front(); people.push_back(temp); }else if(command == 2){ //将no编号的病人,移动到队列首部 int no; cin>>no; //找到序号为no的病人的位置 int target; list<int>::iterator pointIndex = people.begin(); for (;pointIndex != people.end(); pointIndex++) { cout<<(*pointIndex)<<endl; if((*pointIndex) == no){ //移动到队列首部 target = *pointIndex; people.erase(pointIndex); break; } } //将target移动到队列首部 people.push_front(target); }else if(command == 3){ //查看队首的元素 cout<<people.front()<<endl; } } } int main() { //定义测试命令的个数 int n; cin>>n; //定义病人的个数 int p; cin>>p; medicalQueue(n,p); return 0; }
事故现场
- 注意,如果你使用的iterator对数列进行迭代,那么注意你将当前iterator指向的变量删除之后,就不能在往后进行变量了,否则会出现野指针的情况
分析与总结
- 对应stl中的list有了基本的熟悉,题目不难,但是又重新认识了一个新得知识点,同时知道erase并不能随便删除。
这篇关于算法设计与分析——医疗队列——华东师范大学2020机试题A——erase使用容易出现野指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-05并查集详解与实现教程
- 2024-11-05大厂数据结构与算法入门指南
- 2024-11-05大厂算法与数据结构入门指南
- 2024-11-05二叉树入门教程:轻松掌握基础概念与操作
- 2024-11-05红黑树入门教程:从零开始理解红黑树
- 2024-11-05初学者必备:链表基础知识详解
- 2024-11-05平衡树入门教程:理解、构建与应用
- 2024-11-05数据结构入门教程:轻松掌握基础知识
- 2024-11-05数据结构与算法入门教程
- 2024-11-05优先队列入门教程:理解与实现