使用双链接列表构建学生列表的队列

时间:2013-04-02 02:06:47

标签: c++ linked-list queue

对不起所有的问题,但这个功能给了我很多问题。我差不多完成了,但我还有最后一个bug。这个功能的关键是每天一次弹出3个学生。那一天完成,它将移动到第二天并弹出下一个3(有可能移动到下一个队列列表)。我的num2代表当天,每次完成3名学生时,它应该将这一天增加1。

当我运行程序时,我得到了一些奇怪的结果。如果我保持在同一个队列列表中,那一天会增加很好,但是当我跳跃时,它会在第一个增量上停留。例如:

我有两个队列列表

1st Queue list:Rachel,Ed,Amy,Matt 第二队列:约翰,丹尼尔,尼克

结果:

第一天: 瑞秋, 埃德, 艾米

第二天:

马特,是最后一个学生...... 约翰, 丹尼尔,

第2天:

尼克,是最后一个学生..

关于为什么会发生这种情况的任何想法?

主要功能

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

1 个答案:

答案 0 :(得分:2)

您传递m代表reference的日期:

int pop_front(int x, int& m)

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

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

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