2010-12-20 44 views
0
struct node 
{ 
    void *data; 
    struct node *link;  
}; 

給定這樣一種結構,我們稱之爲通用鏈表。根據實時應用程序的用途,這種列表的用途是什麼。通用列表的使用

+4

嘗試閱讀http://en.wikipedia.org/wiki/Linked_list – Kricket 2010-12-20 11:07:12

+0

您能否重新描述您的問題並給出一些背景知道您的意思是「這個清單的用途是什麼實時應用程序使用「?謝謝。 – 2010-12-20 11:07:22

回答

1

你有一個服務接受來自多個應用程序的請求,併爲它們中的每一個提供句柄。該服務可以維護鏈接列表中的每個請求的上下文,並在其完成服務時從列表中刪除該節點。這種情況下的空鏈表意味着沒有應用程序註冊到該服務。

對於例如,考慮建在SIP stack和多個應用程序等IM該服務,可以Presence information與使用SIP棧用於信令的服務進行註冊。現在,該服務將與每個應用程序有關的數據保存在一個鏈表中(這又是一個設計問題,但假設我們有限制服務5個應用程序)。 SIP響應必須重定向到發送請求的應用程序,並說您將回調指針作爲節點的一個值,只要找到響應的相應節點,就可以很簡單地調用它。

每個節點都會保存大量有關每個應用程序的信息,並使用它來將響應發送迴應用程序。您可能需要查看this

2

它的通用性允許你創建一些(測試和可靠的)庫代碼,然後可以重用它。

當然,這不是類型安全這就是爲什麼C++引入(除其他外)泛型模板類。

至於鏈接列表本身的使用:你用它來存儲和檢索可變數目的類似對象。通常情況下,您不會事先知道對象的數量,您可以按照存儲它們的順序獲取它們。從鏈表中刪除一個對象也是非常有效的(一旦你有一個指向它的列表條目的指針)。

1

什麼是它的實時應用方面使用這樣的列表的使用

如果你已經是這個定義和一個指向列表的頭部,那麼它只能爲好創建一個任意的對象堆棧。這是因爲要做任何事情,除了添加或移除一個對象到列表的頭部,你必須遍歷它。即使有限的「效率」,這樣的清單也有其用途,例如作爲您將要回收以避免malloc的未使用的堆對象的緩存。

如果您還有一個指向列表尾部的指針,您可以添加對象以O(1)時間結束。這意味着您可以將其用作隊列。

如果每個項目都有指向其前任以及後繼者的指針,還可以在O(1)時間內從列表中的任意點插入/刪除項目。當然,你仍然需要找到可能涉及線性掃描的對象。