2012-06-27 77 views
8

什麼是容器?據我所知:「容器」和「數據結構」有什麼區別?

  • 抽象數據類型僅是的數據將被存儲的方式的邏輯描述,這將在該數據被允許的操作。例如,一個堆棧被定義爲一個數據類型,包含操作push,pop等等和LIFO訪問。

  • 數據結構是這種抽象定義的實際實現,在某些計算機編程語言中,例如,C++中的堆棧在標準庫中實現爲std :: stack。

首先,請糾正/加強我目前對上述區別的理解。

其次,一個容器究竟是什麼?我聽到這個詞經常被拋出。這與我對數據結構的定義是否相同?

另外,維基百科針對這些術語有三個單獨的條目。

+1

這都是關於上下文的。我認爲將它們分別作爲兩個單詞討論是沒有意義的。 – xvatar

+0

同意。如果你在某個給定的編程語言或實現的上下文中,那麼這些單詞可以有非常明確的含義,但除此之外,它們是非常含糊的。除了ADT,它總是意味着上述內容。 – Johansensen

回答

1

你對ADT和數據結構的印象是正確的,儘管它們在很大程度上是可以互換的。 ADT是明確的摘要,數據結構是一個更爲通用的術語,可以是完全抽象的,也可以指實現細節。

容器是一個非常抽象的想法,但它通常暗示(對我來說)某種形​​式的封裝 - 從某種意義上講,它可能會掩蓋底層對象的複雜性,或者可能呈現出一系列不同的統一接口可能的基礎對象。這是一個紮根於程序員詞彙中的詞,人們一直都在使用它,因此它的含義非常模糊。 ;)

+0

然而,似乎(至少在我不是很熟悉的C++世界中)術語'容器'有時與'collection'同義。 – Johansensen

+0

「集合」是一種ADT,它包含可變數目的項目,通常是統一類型的項目。不同的集合類型可以是關聯的(例如,hashmaps),有序的(例如列表)等等 – Johansensen

1

沒什麼,真的。就像我們人類喜歡做的那樣,它們只是同一個詞的兩個詞。然而,官方CS術語afaik是數據結構,而C++標準對Container有特定的C++要求。但是,一般來說,它們是相同的。

1

容器是數據結構的一個子集。 C++對容器施加了特殊的要求,容器是不同數據結構的實現。

根據維基百科,數據結構是「一種存儲和組織數據的特殊方式」。容器是C++構造,它是一組記錄,它本身就是一個數據結構。

0

正如其他人所說,這些術語被廣泛使用以至於它們具有各種含義,但以下是我經常遇到的用法。數據結構是計算機科學中的一個術語,它可以在沒有任何特定語言的情況下用於理論討論。 在有關算法的書籍中討論了許多數據結構,如隊列,樹,散列表...... 數據結構幾乎可以用任何語言實現。

容器是一個術語,相當於在特定語言的情況下使用,當有可用的程序員可以立即使用的容器庫時。 幾個獨立的庫可以實現相同的(抽象的)數據結構(例如,一個簡單的鏈接列表),但具有不同的容器,即不同的源代碼和不同的名稱(一個可以稱爲「隊列」,另一個稱爲「fifo」和第三個「堆棧」)。

此外,容器必須是存儲其他類型的方式,例如,矢量商店ints。 作爲一個例子,有幾種方法可以在內存中表示一個圖:鄰接矩陣,鄰接表,轉發星......所有這些都是數據結構,但它們不是容器,因爲它們不包含其他類型,它們只是表示圖的節點和鏈接。這些數據結構存儲的數據是節點和鏈接。

相關問題