在你有指針的C++中,很容易實現鏈表。但他們如何在其他語言(如java,python等)中實現。我不想使用內置類(在JAVA中支持)鏈接列表,但我想要的是如何替換指針來創建鏈接列表?如何在不使用指針的情況下實現鏈表?
回答
它們是使用基本上(不包括語法)指針的引用實現的,您不能使用指針運算(在某些語言中它們也不能爲null)。在很多語言中,引用是使用變量的默認方式,與默認值爲by的C++不同。
+1我喜歡這種參考解釋。它非常快速,簡單和準確,除了對C老兵們顯而易見並給他人一個理解編程方面的理由之外。 – delnan
用其他語言處理與指針密切相關的引用。
當你寫自己的類,說class node
,並讓每個node
舉行現場下一node
,你居然抱到下一個節點的引用(或空,如果這是最後一個)
代替如前所述,指向一塊內存的指針被使用。所以就像你在C++
Struct Node {
Node *last;
Node *next;
}
它應該是這樣的:
Struct Node {
Node last;
Node next;
}
一個很好的數據結構類會顯示該鏈表可以用任何語言使用數組,如實施FORTRAN。
而不是使用指針,你可以使用其他方法來找到下一個鏈接。使用數組,而不是指針可以使用下一個元素的索引。
因此,您可以通過使用文件位置而不是指針來實現隨機訪問文件中的鏈接列表。
我不確定這是否算作鏈表。它與基於指針的實現具有不同的特性,因爲它更加有限。除此之外,這完全與此無關,因爲您可以*通過引用構建「常規」鏈表(以及所有其他依賴於間接引用的數據結構)。 – delnan
這是一個列表,它被鏈接。它不使用指針來鏈接節點。它是一個鏈接列表的不同實現*。我在大學的數據結構課上教過這些。 –
您可能在本書中找到一個很好的答案 - http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844 - 我會總結一下我記得的東西。
基本上你會有兩個相同大小的數組(希望大於n,其中n =你想存儲的元素的數量)。我們將它們稱爲陣列A和陣列B.
陣列A [i]保存數據值。數組B [i]保持'下一個'值'k',使得A [i] - > next = A [k]。
希望這會有所幫助。
查看我對托馬斯馬修的回答的評論。 – delnan
記住鏈表的概念是,你可以從一個元素獲取到另一個元素。你怎麼做可以是非常不同的。
在C++中,例如你提到的你可以使用指針。這說另一種方式將是你使用對象的內存地址。
但這只是一種方式。如果您的所有對象都是從數組中引用的,那麼您將能夠通過它在該數組上的索引來引用對象。因此,鏈表中的每個元素都會有一個整數,指定它所連接的對象的索引。
給你另一個例子。如果你有一個字典,你可以用字符串關聯對象。然後你可以使用字符串來引用對方。
鏈接列表的核心概念不是指針,而是列表中的元素負責跟蹤它所連接的元素。
- 1. 如何在不使用指針的情況下模擬指針?
- 2. Java:如何在沒有方法調用的情況下實現指針效果?
- 3. 指針鏈表實現
- 4. 如何在不啓用指南針的情況下計算getOrientation()?
- 5. 如何在不使用AppDomains的情況下實現.net插件?
- 6. 如何在不使用「set!」的情況下實現「letrec」?
- 7. 如何在不使用ListView的情況下實現CursorLoader?
- 8. 如何在不使用^的情況下實現XOR?
- 9. 如何在不使用表格的情況下實現表格佈局?
- 10. 如何在不使用指針或引用的情況下迭代二叉樹?
- 11. 如何在不使用混合列表的情況下實現此功能?
- 12. 如何在不使用const的情況下防止刪除指針?
- 13. 使用函數指針不知道的情況下提前
- 14. 如何在不使用ListActivity的情況下實現ListView? (只使用活動)
- 15. 在不使用密碼的情況下在Java中實現RSA
- 16. 如何在雙鏈表的指針上實現快速排序?
- 17. 如何在不使用已棄用的Notification類的情況下實現startforeground?
- 18. 如何使用chart.js實現零散圖表,默認情況下不可用?
- 19. 如何在不使用onClick的情況下關注Javascript鏈接
- 20. 在不使用註釋的情況下實現SOAPHandler @HandleChain
- 21. 在不使用Modernizr的情況下實現這個結果?
- 22. 如何在不指定路徑的情況下使用shutil.rmtree
- 23. 如何在不使用助手的情況下指定操作
- 24. 鏈表實現指針故障
- 25. 如何在不使用DRBD的情況下實現Rabbitmq高可用性?
- 26. 如何在不使用android的情況下實現android應用程序?
- 27. 如何在不使用dragdetect偵聽器的情況下在Slider上實現dragdetection?
- 28. 這個函數如何在不遞歸的情況下實現?
- 29. 如何在不崩潰編譯器的情況下實現MutableCollectionType?
- 30. 如何在不進行輪詢的情況下實現std :: when_any?
閱讀本文,看看它是否足以解決您的問題:http://stackoverflow.com/questions/7480783/pointers-in-java –
@asawyer Python和Java中的引用都沒有通過。在許多使用同一意義上的引用的其他語言中都沒有。 – delnan
@asawyer:同意delnan。 Java是通過價值傳遞的。總是。該值可能是一個參考值,但值是通過的值。 –