编程语言
首页 > 编程语言> > 算法设计与分析——医疗队列——华东师范大学2020机试题A——erase使用容易出现野指针

算法设计与分析——医疗队列——华东师范大学2020机试题A——erase使用容易出现野指针

作者:互联网

文章目录

题目描述

在这里插入图片描述

思路分析

实现源码

#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;
}

事故现场

分析与总结

标签:命令,people,int,command,华东师范大学,队列,erase,2020,pointIndex
来源: https://blog.csdn.net/Blackoutdragon/article/details/119384898