2013-04-02 64 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