用双链表构建一个学生列表队列

Building a Queue of student lists with a Double link list

本文关键字:一个 列表 队列 链表 构建      更新时间:2023-10-16

抱歉所有的问题,但这个函数给了我很多问题。我几乎完成了,但我还有最后一个错误。这个函数的要点是每天一次,送3个学生。一天完成后,它将移动到第二天,并弹出下一个3(有可能移动到下一个队列列表)。我的num2代表一天,每次它完成3个学生,它应该增加一天1。

当我运行程序时,我得到一些奇怪的结果。如果我停留在同一个队列列表上,那么这一天将会增加,但是当我跳转时,它会被卡住在第一个增量上。例子:

我有两个队列列表

第一队列:Rachel, Ed, Amy, Matt第二排:John, Daniel, Nick

结果:

俊:瑞秋,艾德,艾米

Day2:

Matt是最后一个…约翰,丹尼尔,

2天:

Nick是最后一个学生。

你知道为什么会这样吗?

主要功能
    int s = 0;
    int d = 1;
    cout<<"How many Student do you currently have appointments with? "<<endl;
    cin>>s;
    cout<<"What day would you like to start seeing students?"<<endl;
    cin>>d;
    cout<<"Day "<<d<<endl;

    s = priority1->enqueue(s,d);
    s = priority2->enqueue(s,d);
    s = priority3->enqueue(s,d);
    s = priority4->enqueue(s,d);

队列函数调用

int enqueue(int x, int& m)
{
    n->pop_front(x,m);
}

LinkList Pop_front函数

int pop_front(int x, int& m)
    {
        int num = x;
        int num2 = m;
        string value;
        while(front != NULL)
            {   
                if(num == 3)
                {
                    num = 0;
                    num2++;
                    cout<<endl<<endl<<"Day "<<num2<<endl;
                }
                while(num<3)
                {
                    Node *temp = front;
                    if(front->next)
                    {   value = front->name;
                        front = front->next;
                        front->prev = NULL;
                        size--;
                        delete temp;
                        cout<<value<<", "<<endl;
                        num++;
                        continue;
                    }
                    cout<<endl;
                    if(front->next == NULL)
                    {
                        value=front->name;
                        front = NULL;
                        back = NULL;
                        delete temp;
                        size--;
                        cout<<value<<", is the last student in this priority Queue list"<<endl;
                        num++;
                        return num;
                    }
                }
}
    }

您正在通过reference表示天数的m:

int pop_front(int x, int& m)

但是你在函数体中使用num2:

num2++;
cout<<endl<<endl<<"Day "<<num2<<endl;

,因此您不会在每次调用enqueue时传递更新的m。该引用仅适用于m,当您将m分配给num2时,您正在创建一个新变量,并且它们没有链接,因此对num2的更改将不会反映在m上。