2010-12-09 115 views
4

我正在創建可添加,查看和編輯學生信息的學生列表(鏈接列表)。我有兩個字段,分別是學生名字和學生成績,並且我在列表中添加新學生,並按照學生的成績降序排列。編輯鏈接列表中的節點

我已完成添加和查看部分。問題在於編輯部分,因爲我需要編輯信息,然後我需要再次對它進行排序,以便它將位於列表的正確位置。

例如,我必須按照他們的成績排列3的學生信息:

student1 90 -> student2 85 -> student3 80 -> NULL 

然後我需要編輯STUDENT2的成績,以75所以編輯鏈表現在應該安排如下:

student1 90 -> student3 80 -> student2 75 -> NULL 

我該怎麼做?你不需要給我任何代碼。我只想提供一些關於如何實現我的程序的編輯部分的建議。我正在考慮創建一個新節點(使用編輯後的信息),刪除舊節點並將編輯後的節點插入到列表中。我的邏輯正確嗎?還是有更好的方法來解決我的問題。

+0

[設置定時器計數如何@newbieatc上崗前長過類似的問題] – 2010-12-09 14:26:06

+0

@paul她今天不在線... :) – newbie 2010-12-09 14:32:52

回答

2

基本上你的想法是正確的,但我不會創建一個新的節點。我會做的將是:

  1. 確定值是否增加或減少(和更新節點)。
  2. 從列表中取消鏈接節點。
  3. 向前或向後搜索(取決於等級的增加或減少)以獲得正確的位置。
  4. 將節點鏈接到新位置。

請注意,將列表索引到數組等等可能會比直線遍歷更快地進行搜索。如果你已經有了這樣的機制,當找到重新插入節點的位置時,使用它可能會更快。

+0

這也是正確的,但這意味着他可以編輯鏈接列表節點,但是他必須強制另一個完整的O(N)檢查。如果他在第2步之後做了你所說的,並且之後立即編輯了一個節點(「自動」而不必調用一個額外的函數),那將會更好。這是我從你的描述中瞭解到的,否則請澄清。 +1 – Muggen 2010-12-09 14:26:04

3

您可以通過

  • 刪除目標節點
  • 編輯目標節點數據
  • 使用現有的邏輯插入節點重新插入節點完成自己的目標。
+0

謝謝... :) – newbie 2010-12-09 14:37:48

1

你可以做一個編輯指定節點的函數。掃描列表直到找到該節點,然後直接編輯它。當然你會使用一個指針。對於排序的一部分,說你有n個節點,每個節點i與節點進行比較後,並交換它們,如果你是比較一個較大:

for every node n1 in list 
    for every remaining node n2 in list 
     if n2->grade > n1->grade 
      swap 'em 

可以交換它們複製他們的記憶,所以你將不需要改變任何指針。

+1

是的..但是我需要排列按照等級劃分它... – newbie 2010-12-09 14:23:38

3

單鏈表?

找到您要編輯的節點,並保留指向前一節點的指針或編寫例程以檢索前一節點。

從鏈接的列表中刪除您的節點(通過設置previous_node->旁邊thisOne->下一個)

完成相應的修改。 。

插入在列表中的合適的位置的新的節點(通過遍歷列表unti下一節點是小於已編輯的值

拼接編輯成列表(editedNode->下一= nextNode;電流 - >未來= editedNode)

隨着雙向鏈表,你可以只用「其他」 /返回/向上鏈接,找到以前的節點