2015-03-13 46 views
1

我正在學習軟件開發課程基礎知識中的數據結構。我也遇到過下面的數據結構:何時使用哪種數據結構?

  • 的Structs
  • 陣列
  • 列表
  • 隊列
  • 哈希表

...等等。我對他們的工作方式有了很好的理解,但我正在努力理解何時何地使用它們。

我可以識別使用隊列數據結構,因爲這在打印機和/或線程排隊和優先級排序中會很有用。

瞭解數據結構的優缺點,並在代碼中實現它是不同的事情,我發現前者很困難。

什麼是使用上面列出的每個數據結構的簡單示例?

例如:

隊列:先入先出→用於打印機隊列排隊文檔

+0

你甚至知道每個數據結構的作用嗎?一旦你知道了,它應該很明顯何時使用它們。 – 2015-03-13 14:42:39

+0

顯然我做... – 2015-03-13 16:23:24

+0

瞭解他們做什麼以及何時以及如何在代碼中實現它們是兩個完全不同的事情。我甚至知道我的語言支持,但看不到任何理由使用它們而不是數組。根據我的經驗,Array一直涵蓋我需要的東西。從不需要使用散列表來更快地進行搜索,插入和刪除。永遠不需要樹或堆。我可以看到的唯一其他數據結構可能是打印機隊列或線程隊列隊列。我無法確定我會在哪裏使用其他人。我要求提供一個簡單的例子。如果那有意義的話。 – 2015-03-13 16:30:02

回答

1

當我第一次開始編程時,我無法理解它們,所以我決定先試一試。

我想盡可能簡單。嘗試甲骨文文檔來回進一步的細節


結構:當以往任何時候都需要對象狀結構,在那裏你可以將相關的數據,使用結構。雖然Java中很少使用結構(因爲對象是在它們的位置創建的)

陣列:陣列是連續內存。當你想要基於索引的固定時間訪問時,與鏈表不同,數組非常快,因此使用它們。

但是,數組的積壓是您需要知道初始化時的大小。還陣列不支持更高水平的方法,如添加(),刪除(),清除(),包含(),的indexOf()等等


表:是其可以使用來實現的接口數組(ArrayList) 或LinkedLists(LinkedList)。它們支持前面指定的所有更高級別的方法。

同樣列表每當它出現空間時重新調整大小。您可以指定創建底層數組或鏈表列表的初始大小,但是無論何時達到限制,它都會創建一個較大大小的底層結構,然後複製最初大小的內容。


隊列或堆棧:是一種實現技術,並沒有真正的數據結構。如果你想FIFO實現,你在任陣列或鏈表(是的,你可以實現在這兩個數據結構此技術)實現Queue https://en.wikibooks.org/wiki/Data_Structures/Stacks_and_Queues


的HashMap:的Hashmap使用,只要你想存儲的關鍵值對。如果您注意到,您不能使用數組或鏈接列表或任何其他提到的數據結構來實現此目的。密鑰可以是任何東西從字符串對象(但請注意,它必須是一個對象,並且可以不是一個原始)和值也可以是任何對象


Google退出每個數據結構的更多細節

+0

很高興我能幫忙.. :) – 2015-03-13 12:31:15

+0

Prasad,非常感謝你。這正是我正在尋找的。我已經閱讀了所有正確的術語,並且知道數組在內存中是連續的,並且列表不是,而且堆棧是FILO,而FIFO是隊列。儘管我研究了這些信息,但我無法確定(簡單地說)何時使用哪些信息。我很欣賞反饋! – 2015-03-13 12:32:53

0

所有這些數據結構都是根據它們在程序中的需求來使用的。試圖找到一個數據結構的優勢。這應該讓事情you.What我說不會太多明確更清晰,但我給它一個鏡頭

例如像

結構是用於創建數據類型,說你想有一個數據類型爲Book &有這本書的名字Book Structure

如果您使用鏈接列表,&比數組要好一些,列表更容易訪問這兩種方式。隊列,好吧,你可以把它們想象成現實生活中的隊列,先入先出。所以當你需要設置這個優先級時,你可以使用它們。

就像我說過的,尋找一個優於另一個應該讓你的事情變得清晰。