我在嘗試使用冒泡排序對雙向鏈表進行排序。我自己寫了雙鏈表類。節點包含四個值(firstName,lastName,Id和department)。在C中雙向鏈表中交換節點#
以下是我試圖用來對列表進行排序的方法(我使用Windows窗體並從窗體調用sortList方法)。
K和I是doubleLinkedList類的節點。
public DoubleLinkedList sortList(ref DoubleLinkedList toSort)
{
for (toSort.K = toSort.First; toSort.K != endOfTheList(toSort.First); toSort.K = toSort.K.NextLink)
{
for(toSort.I = toSort.K.NextLink; toSort.I != endOfTheList(toSort.First); toSort.I = toSort.I.NextLink)
{
if (string.Compare(toSort.K.Department, toSort.I.Department) > 0)
{
MessageBox.Show(toSort.ToString());
swap(toSort, toSort.K, toSort.I);
}
}
}
MessageBox.Show("List is sorted");
MessageBox.Show(this.ToString());
return toSort;
}
public void swap(DoubleLinkedList swapList, Node _k, Node _i)
{
MessageBox.Show("Swapping " + swapList.K.ToString() + "for" + swapList.I.ToString());
Node temp = _k;
swapList.K = _i;
swapList.I = temp;
MessageBox.Show(swapList.K.ToString() + swapList.I.ToString());
MessageBox.Show(swapList.ToString());
}
倒數第二個消息框顯示,名字,姓氏,Id和部門節點K和節點我已經交換的方法,但他們並沒有真正在doublelinkedlist交換。
如果有人可以給我建議,我如何改變這些方法來實際交換列表中的值,將不勝感激。我在網上找到了一些例子,但他們使用的是LinkedList<>
類,我真的想要使用我自己的類。
作爲一個例子,節點K =米歇爾賣方,NO12,銷售 節點I =尼克霍奇,NO22,帳戶
所述交換方法之後,K =尼克霍奇,NO22,帳戶和I =米歇爾賣家,No12,Sales,但在實際列表中節點未交換。
什麼是'K'和'I'?爲什麼要爲特定類型的節點編寫排序算法,而不是比較器作爲參數的更通用的bubblesort? –
我的猜測是你的交換方法沒有做你認爲的事情。正如上面的評論所述,「K」和「I」是什麼? –
K和I是兩個節點,它們是我的doublelinkedlist類的屬性。我正在使用它們遍歷sort方法中的列表來比較列表中的節點。我也忘了提及該清單應該按部門按升序排序。所以我想要做的是比較兩個節點的部門字符串,並在必要時進行交換。 –