2012-10-02 63 views
1

不知道這是否是一個有效的問題,但它在這裏。當涉及到不同的列表(linkedList,隊列,堆棧等)和遞歸算法時,我有過這個疑問。我只是不明白什麼時候應該使用它們或者爲什麼。我知道如何實現它們,但我不確定爲什麼應該使用列表而不是常規數組,或者爲什麼應該使用遞歸而不是for來完成。我即將畢業於1/2年,我不想在不知道這一點的情況下找工作。遞歸和不同的列表

在此先感謝,如果你可以給我,我應該使用其中的任何一個問題的一個例子,我將不勝感激

+0

遞歸方法對迭代的代碼可能更簡單。例如,瀏覽樹或圖節點。要在遞歸方法上使用List agains數組,實際上取決於程序員,但通常對列表進行編碼要比基於數組更快,特別是在您不知道可容納多少數據的情況下。 –

+0

我即將問一大堆問題,我希望它不是太多的拖拽^^' – Jcorretjer

+0

[This thread](http://stackoverflow.com/questions/3021/what-is-recursion-and-when - 我應該使用它)提供遞歸的不同觀點。對於不同的數據結構,象Java這樣的語言將List和Queue組織爲接口,並將LinkedList和Stack組織爲這些接口的實現。根據定義,[閱讀Java對LinkedList的定義](http://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html),瞭解事物是如何組織的以及它們提供了什麼。 –

回答

0

遞歸和迭代是在「自己能做什麼」方面等同的。您將使用遞歸而不是迭代的原因是它簡化了如何編寫某些算法。例如,遍歷二叉樹遞歸地產生比代碼迭代更清晰的代碼;遞歸地寫快速排序比迭代地執行更簡單,更清潔。遞歸就是利用程序堆棧來存儲狀態的行爲;你可以通過自己存儲棧來將任何遞歸算法轉換爲迭代算法。我建議你用Racket這樣的語言工作一段時間。它會讓我的頭腦比我的話語更好。

您通常會使用一個列表,而不是需要頻繁刪除的數組,而且您不需要經常訪問特定元素。從數組中刪除是O(n)操作,因爲刪除元素之後的所有內容都需要向左移動一個索引。隊列不一定是列表結構,它們可以用數組表示。隊列和堆棧在許多算法中很有用,例如廣度和深度優先圖搜索。我建議你爲此獲取一個數據結構和算法書,讓算法說明爲什麼某些數據結構是有用的將是非常寶貴的。

+0

這是非常清楚,謝謝:) – Jcorretjer

+0

我有一本書,但它不是很善於解釋任何事情的用法:/ – Jcorretjer

+0

我要去嘗試球拍,但我想我明白你的意思了哈哈 – Jcorretjer

0

看看這篇文章,與迭代比較遞歸:http://www.codeproject.com/Articles/21194/Iterative-vs-Recursive-Approaches
通過Array or List in Java. Which is faster?可以更好地理解列表和數組。

+0

,所以遞歸更容易編寫,但運行速度較慢,而迭代是另一種方式。得到它了!我得到了爲什麼我應該使用列表而不是數組,但我仍然有一個與列表有關的問題,並且它是使用。那就是爲什麼我應該使用堆棧而不是隊列或鏈接列表?使用一種數據結構而非另一種數據結構的優點是什麼?(不確定是否知道我的意思) – Jcorretjer

+0

@ chelo666您使用的數據結構完全取決於目的或應用程序。例如,您可以使用堆棧而不是隊列在Postfix和中綴表達式之間切換。但是可以使用Queue完成調度。所以,考慮一下。我想你明白了吧,給我一個大拇指;) – venkatKA

0

以下是描述不同Java集合的頁面。基本上它取決於你的內容以及你想如何使用它們。例如,當我需要一個沒有重複值的集合時,我使用一個Set。當重複無關緊要時,我使用List,因爲它們執行速度快,而且在我看來更容易編碼。還有一些事情,例如按照您輸入的順序存儲數據的隊列。

Collections Description

+0

我忘了看這一個大聲笑這是相當有幫助太:) – Jcorretjer