2014-07-01 64 views
4

我的理解是,數據結構本質上是一個藍圖,它包含根據規範創建最終產品所需的所有信息,以及數據類型是該設計的物理實現或實現(非常類似於生物學中基因型和表型之間的差異)。關於面向對象編程的抽象數據類型vs數據類型與數據結構

當涉及到面向對象編程面向對象的,這將是準確的說是一個抽象類接口是一種數據結構,因爲它包含了一組值和宣佈的行爲,而且一個它實現的抽象類或接口是一種數據類型,因爲它是這些行爲的具體表現形式?

如果是這種情況,那麼關於抽象數據類型(ADT)和數據類型之間的區別是什麼?它們是真正獨特的,還是ADT只是通俗地縮短爲「數據類型」?

我問這個,因爲在我看來,這些術語在對話中經常可以互換使用,這讓我想知道我的理解是不正確的。

回答

3

我是相當新的回答在stackoverflow和這種數據結構與數據類型討論,但希望這會有所幫助。這些環節都還做了很多讓我學到的東西我:

Is there a difference between 'data structure' and 'data type'?

Explain the difference between a data *structure* and a data *type*

http://cs.lmu.edu/~ray/notes/dtds/

首先,我要定義我的使用單詞「實施」,因爲它似乎我可能會使用它稍微不同於你。我用C++中的實現文件來定義實現。這種實現包含了一些界面如何工作的源代碼。例如,單鏈表的實現是一堆節點,每個節點都包含帶有指向下一個節點的開始節點的數據,直到最後一個節點指向某種空值。從這個意義上說,我不能說數據類型是數據結構的物理實現。簡化的版本是數據結構實際上是一種或多種數據類型的物理實現。例如,堆棧是數據類型,而LinkedStack是實現堆棧的數據結構。雖然數據類型可以表示上述鏈接所描述的數據結構的所有可能實例,但並非所有數據類型都必須這樣做。例如,一個int是一個數據類型,但說它是一個數據結構並不是最好的想法。

總結一下,請讓我按照數據類型,抽象數據類型和數據結構的順序進行。

數據類型或類型用於通過其值和操作對數據進行簡短分類。例如,如果數據是42,是42還是int或字符串?如果它是一個int,它是什麼int(它的值是什麼)?是積極的還是消極的?它有什麼樣的操作?我可以與它分開嗎?從這個意義上說,數據類型完全依賴於它們的外部行爲。

現在一些數據類型可能不指定任何類型的實現,而這些數據類型稱爲抽象數據類型。基本上,如果用戶無法訪問數據類型,則數據類型是抽象數據類型,也不關心訪問值和操作如何實現。例如,整數是抽象數據類型,因爲程序員不需要知道並且可能不關心如何使用整數或者如何添加整數。然而,程序員仍然可以使用整數,增加他/她的內容。不顯示其實現的用戶創建的數據類型也將是抽象數據類型。因此,許多數據類型都是抽象數據類型。另外,抽象數據類型可以模擬相似的數據類型和數據結構,並可以通過上述鏈接描述的特定數據類型和數據結構來實現。

最後,數據結構是有效存儲數據的方式,它們都是關於實現的。例如,一個單鏈表和一個雙鏈表是不同的數據結構,因爲它們有不同的實現。單鏈表只能前進,而雙鏈表可以前進和後退。我描述了上面的單鏈表的實現,簡而言之,雙鏈表的實現與單鏈表的實現相同,但是每個節點也會有一個指向每個先前節點的指針,以允許雙鏈表反向。數據結構的要點是數據結構的實現(如何組織/存儲數據)是如何區分的。

如果你想效率雙向鏈表已超過單鏈表的例子,這些鏈接都不錯:

When is doubly linked list more efficient than singly linked list?

https://social.msdn.microsoft.com/Forums/vstudio/en-US/270bebdb-9032-4fc1-97c6-bc017d7e0a45/when-to-use-single-linked-list-and-when-to-use-double-linked-list?forum=csharpgeneral

否則,希望我的一些使用和良好的運氣。

+0

你能在ADT和數據類型之間簡單的話告訴差異。我有點困惑 –

3

抽象數據類型

  • 定義的行爲和狀態管理合同約定
  • 抽象數據類型只存在概念。他們在語言的背景下沒有具體的存在。這就是爲什麼維基百科將其具體指爲mathematical model

數據結構

  • 類一級執行由一個抽象數據類型定義的合同。

  • 數據結構以包含您的類定義的代碼的形式存在。

數據類型

  • 數據類型存在於從你定義的類創建的對象的形式的具體實例。

實例

  • 一個優先級隊列是可與二進制堆數據結構來實現的抽象數據類型。

  • 列表是可以與陣列中實現,或者鏈表數據struture

TLDR

抽象數據類型>數據結構>數據類型

一個抽象數據類型
+0

你可以舉例說明數據類型嗎? –

+0

var arr = [1,2,3]; –

0

解釋位模式的方法稱爲數據類型。有幾種數據類型,如二進制整數,二進制編碼的十進制數,非負整數,實數和字符串。例如:位串00100110可以被解釋爲數字'38'(二進制編碼的十進制)。

如果我們用數據結構做一些特定的操作,那麼具有這些特定操作的數據結構就稱爲抽象數據類型。它是用於指定數據類型的邏輯屬性和操作的工具。

數據結構是抽象操作的實現。

-source:圖書,谷歌搜索....