[解決]實現跳躍列表在C++
所以我決定嘗試並創建一個排序的雙向鏈接跳轉列表...
我敢肯定,我有它的工作原理,把握好。當你插入x時,程序在基礎列表中查找放置x的適當位置(因爲它是排序的),(概念上)翻轉一個硬幣,如果「硬幣」落在一個然後該元素被添加到它上面的列表中(或者一個新的列表是由元素創建的),鏈接到它下面的元素,並且硬幣再次翻轉等。如果「硬幣」在任何時候落在b上,則插入結束。您還必須將每個列表中存儲的「無限」存儲爲起點,以便插入小於起始點的值(這意味着永遠不會找到該值),因此無法插入該值。
要搜索x,你從「左上角」(最高名單最低值)和「右移」到下一個元素開始。如果該值小於x,那麼繼續執行下一個元素,等等,直到您「走得太遠」並且該值大於x。在這種情況下,你回到最後一個元素並向下移動一層,繼續這個鏈,直到你找到x或x從未找到。
要刪除x,您只需搜索x並在列表中出現時將其刪除。
現在,我只是做一個存儲數字的跳過列表。我認爲STL中沒有任何東西可以幫助我,所以我需要創建一個List類,它包含一個整數值並具有成員函數,搜索,刪除和插入。
我遇到的問題是處理鏈接。我敢肯定,我可以創建一個類來處理「水平」鏈接,指向前一個元素和前面的元素,但我不知道如何處理「垂直」鏈接(指向相應的元素?在其他列表)
如果有我的邏輯是有缺陷的,請告訴我,但我的主要問題是:
- 如何處理縱向聯繫,以及是否我的鏈接的想法是正確的現在
- 我讀了我的班級列表的想法我在想列表應該持有一個整數向量而不是一個整數。事實上,我非常積極,但只是想驗證一下。
- 我假設硬幣翻轉會簡單地調用int函數,其中rand()%2返回0或1的值,如果它爲0,則值爲「levels up」,如果爲0,則插入結束。這是不正確的?
- 如何存儲類似於-infinite的值?
編輯:我已經開始編寫一些代碼,並且正在考慮如何處理List構造函數....我猜測在構造時,「-infinite」值應該存儲在vectorname [ 0]元素,我可以在它創建後調用insert來將x放在適當的位置。
對於2我的意思是如何處理實際的數據存儲。我假設列表應該有一個私人成員:矢量數字,保存插入的數字。對於4我猜它應該只是最低的整數值? –
trikker
2009-08-13 03:24:18
對於2,你需要存儲一個指向你想存儲的指針,如* char或* int或* MyClass等等......對於4,沒有辦法用常規整數來實現,你必須實現你自己的或者使用浮點數。 – Unknown 2009-08-13 03:31:17
它爲什麼包含一個向量?列表中的每個節點都應該存儲一個整數。您可以使用std :: numeric_limits :: min()作爲-infinity,但我建議使頭節點成爲特例。 –
Geerad
2009-08-13 03:41:20