2013-04-02 63 views
-1

对不起所有的问题,但是这个功能给了我很多问题。我已经完成了,但我有一个最后的错误。这个功能的重点是每天播放一次3名学生。当天完成的一天,它将移动到第二天,并弹出下一个3(有可能移动到下一个队列列表中)。我的num2代表一天,每次完成3个学生,它应该增加1天。使用Double链接列表构建学生列表队列

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

我有两个队列列出

第一次队列列表:雷切尔,埃德,艾米,马特 第二队列列表:约翰·丹尼尔,尼克

结果:

第一天: 雷切尔, 埃德, 艾米

第二天:

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

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

链表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; 
        } 
       } 
} 
    } 
+0

为什么不直接使用std :: list? –

+0

建立我自己的项目 – user2130537

+0

这并不能解释为什么你的项目不能使用std :: list。该类已由类库作者调试过。 –

回答

2

你传入m它通过reference代表天:

int pop_front(int x, int& m) 

但后来你在函数体使用num2

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

和这样你就不会在每次调用传递一个更新menqueue。该参考仅适用于m,当您将m指定为num2时,您正在创建新变量并且它们未链接,因此num2的更改将不会反映为m