數據結構與算法——10分鐘理解抽象數據類型(ADT)

在學習數據結構類型時,首先遇到的一個難點即是如何理解抽象數據結構類型。通過閱讀多個博客,將個人理解總結如下:

如已看過抽象數據類型定義,可直接跳過定義。
抽象數據類似的定義
抽象數據類型(Abstract Data Type 簡稱ADT)是指一個數學模型以及定義在此數學模型上的一組操作。抽象數據類型需要通過固有數據類型(高級編程語言中已實現的數據類型)來實現。對一個抽象數據類型進行定義時,必須給出它的名字及各運算的運算符名,即函數名,並且規定這些函數的參數性質。一旦定義了一個抽象數據類型及具體實現,程序設計中就可以像使用基本數據類型那樣,十分方便地使用抽象數據類型。

如何理解?
1, 抽象數據類型 = 邏輯結構+數據運算。邏輯結構不涉及數據在計算機中具體的實現和存儲,這些操作是由存儲結構決定的,這就是說,抽象數據類型只需考慮問題本身即可。

均以買衣服的例子進行解釋:在買衣服砍價時,自己需要將砍價這個事情抽象爲語句(即構建模型)表達出來(操作),而不需要考慮賣家能否接受自己說的話(不需要考慮計算機如何處理)。

2,類型是指一類數據。基本數據類型被人做是最基本地,不可再劃分的數據,一般就是整形、浮點型、以及字符型。抽象數據類型是由若干基本數據類型歸併之後形成的一種新的數據類型,這種類型由用戶定義,功能操作比基本數據類型更多,一般包括結構體和類。

例:要表達的語句中,應包含“動詞”,“衣服名稱”,“價格數字”等類型。也就是說,說的語句是由許多基本類型組成。

3,抽象數據類型是在在不涉及具體的,和計算機系統相關的細節情況下,優先理解問題本身,在此基礎上,實現用計算機求解問題的過程。這就是使用抽象數據類型的目的。

例:我將砍價的語句說出來目的就是爲了能夠便宜點買衣服,將話說出來也便於賣家瞭解我的想法(便於計算機進行處理)。

再舉一個別的博客裏面的例子:
構建抽象數據類型複數(e1+e2i)

這裏是引用

通過上例可知,問題是要將複數加法描述出來,而抽象數據類型就是在這種形式化的描述下把數據的組成和如何操作的問題描述清楚,且沒有涉及到具體的計算機具體實現的一些問題。從數據對象中看出,抽象數據類型是由實數數據類型組成。另外,右側c++代碼是在通過抽象數據類型ADT描述清楚問題本身後,然後在此基礎上設計高級程序語言中具體實現的過程,在這個階段涉及到了計算機的具體實現和存儲等因素。從此可知,該例子也符合上文中提出的3點對抽象數據類型理解的看法。

參考博客1
參考博客2
百度百科

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章