2017-02-10 66 views
1

所以我有一個關於隊列的問題。 我需要構建一個函數,它接受一個隊列並返回從最小值到最大值的排序。 我寫了一個函數來找到我在隊列中最小的數字不改變隊列本身(選中這一項,它的工作原理) 然後我寫了這個:排序隊列中的數字

static Queue<int> Order(Queue<int> q) 
{ 
    int x; 
    Queue<int> help = new Queue<int>(); 
    while (!q.IsEmpty()) 
    { 
     if (q.Head() == Small(q)) 
      help.Insert(q.Remove()); 
     else 
     { 
      x = q.Remove(); 
      q.Insert(x); 
     } 
     Order(q); 
    } 
    while (!help.IsEmpty()) 
     q.Insert(help.Remove()); 
    return (q); 

}

,我真的可以看不清楚我在哪裏搞錯了,因爲它的劑量正常。 有什麼建議嗎? PS:我對C#2010工作,對不起壞英語

+0

有沒有C#2010你的意思是一個特定的版本,例如C#3.0(或4.0)?如果你的代碼不能按預期工作,你應該解釋它目前的行爲。 –

+0

嗯..我真的不知道這是什麼版本。關於它的行爲,如果我放置的數字已經是有序的,沒有任何反應它只是打印它,但是當它不是它說「未處理的異常」 – salam

回答

2

試試這個編輯的版本:(請注意,你的代碼還排序輸入參數「Q」)

static Queue<int> Order(Queue<int> q) 
{ 
    int x; 
    Queue<int> help = new Queue<int>(); 

    while (q.Count > 0) 
    { 
     if (q.Peek() == q.Min()) 
      help.Enqueue(q.Dequeue()); 
     else 
     { 
      x = q.Dequeue(); 
      q.Enqueue(x); 
     } 
     Order(q); 
    } 
    while (help.Count > 0) 
     q.Enqueue(help.Dequeue()); 
    return (q); 
} 

,但你也可以使用LINQ如下得到排序隊列:

static Queue<int> Order(Queue<int> q) 
{ 
    Queue<int> q2 = new Queue<int>(); 
    foreach (int i in q.OrderBy(x => x)) 
     q2.Enqueue(i); 
    return q2; 
} 
+0

我會def用LINQ路線去。我可以看到在實時分揀時沒有優勢。只有數據流式傳輸纔有意義。 –

+0

嗯,非常感謝回覆,我想我儘管沒有學習你使用過的那些函數(我不確定是否稍後會學習它們,因爲我剛剛開始這樣做,所以我沒有詳細說明你在那裏做了什麼。 )。我實際上想到了另一種方式來做到這一點,我只是很好奇,爲什麼沒有這個工作。但是,再次感謝。 – salam