從基本資料型別到抽象資料型別

2021-08-21 04:29:11 字數 1376 閱讀 7203

在馮 · 諾依曼體系結構中,程式**和資料都是以二進位制儲存的,因此,對計算機系統和硬體本身而言,資料型別的概念其實是不存在的。機器指令和組合語言中,資料物件是用二進位制數表示的,記憶體裡存的都是二進位制,對於記憶體裡存的內容,可以說 「你認為它是什麼,它就是什麼」。在高階語言中,為了有效地組織資料,規範資料的使用,提高程式的可讀性,方便使用者使用,引入了整型,實型等基本資料型別。不同的高階語言會定義不同的基本資料型別。程式設計時只需知道如何使用這些型別的變數(如何宣告,能執行哪些運算等),而不必了解變數的內部資料表示形式和操作的具體實現。

然而當表示複雜資料物件時,僅使用幾種基本資料型別顯然是不夠的。某些語言(如pl/1)試圖規定較多的基本資料型別(如陣列,樹,棧等)來解決這個問題。但實踐表明,這不是乙個好的辦法,因此任何一種程式語言都無法將實際應用中涉及的所有複雜資料物件都作為其基本資料型別。所以,根本的解決方法就是允許使用者自定義資料型別(user-defined data type)。於是在後來發展的語言(如c語言)中,出現了構造資料型別(也稱為復合資料型別

)。它允許使用者根據實際需要利用已有的基本資料型別來構造自己所需的資料型別,它們是由基本資料型別派生而來的,用於表示鍊錶,樹,堆疊等複雜的資料物件。例如c語言中構造資料型別的典型代表就是結構體。c語言通過指標和型別強轉,使我們可以對一塊記憶體進行「你希望它代表什麼,它就代表什麼」的操作,從而實現在更深的層次上控制計算機。

儘管構造資料型別機制使得某些比較複雜的資料物件可以作為某種型別的變數直接處理,但是這些型別的表示細節對外是可見的,沒有相應的保護機制,因而在使用中會帶來許多問題。例如,使用者可在乙個模組中隨意修改該型別變數的某個成分,而這種修改對處理該資料物件的其他模組又會產生間接的影響,這對於乙個由多人合作完成的大型軟體系統的開發是很不利的。於是又出現了「資訊隱藏」和抽象資料型別的概念。

所謂抽象資料型別(abstract data type,adt)是指這樣一種資料型別,它不再單純是一組值的集合,還包括作用在值集上的操作的集合,即在構造資料型別的基礎上增加了對資料的操作,且型別的表示細節及操作的實現細節對外是不可見得。之所以說它是抽象的,是因為外部只知道它做什麼,而不知道它如何做,更不知道資料的內部表示細節。這樣,即使改變資料的表示和操作的實現,也不會影響程式的其他部分。抽象資料型別可達到更好的資訊隱藏效果,因為它使程式不依賴於資料結構的具體實現方法,只要提供相同的操作,換用其他方法實現時,程式無需修改,這個特徵對於系統的維護很有利。c++中的類(class)是抽象資料型別的一種具體實現,也是物件導向(object-oriented)程式語言中的乙個重要概念。從結構體過渡到類是順其自然的事情,但是不能將c++看成是帶類的c,因為它帶來的是思考和解決問題角度的轉變。不同於面向過程的程式設計,在物件導向程式設計中,程式設計師面對的不再是乙個個函式和變數,而是乙個個物件。每個物件包含兩個部分:資料和方法,資料用來儲存物件的屬性,而方法用來完成對資料的操作。物件與物件之間是通過訊息進行通訊的。

抽象資料型別

本篇文章簡單的講解下表 棧 佇列。首先先了解一下什麼是抽象資料型別。它是這麼定義的 抽象資料型別 abstract data type,即adt 是帶有一組操作的一些物件的集合。那麼adt怎麼理解呢?首先你只需要記住表 集合 圖以及與他們各自的操作一起形成的物件都可以被看做抽象資料型別.這就跟整型 ...

抽象資料型別 表

資料結構與演算法分析.c 實現 總結 抽象資料型別 abstract data type,首先顧名思義,她是一種資料型別,就像整數 字元,類似於加減乘除,他有自己的操作,例如 並和查詢 並沒有什麼法則規定一定要有什麼操作,具體的看設計要求 每種資料型別的實現方式也是不同的,主要有 陣列實現和鍊錶實現...

抽象資料型別(ADT

說到抽象資料型別,那麼就得先提到資料型別 資料型別指的是乙個值的集合以及定義在這個集合上的一組操作 為什麼要有不同的資料型別呢 當我們計算1 1的時候,只需要很小的儲存空間,但是當我們去計算10000 100000的時候,所需要的空間就會大許多,那麼我們為了去區分這些類別的差異,就有了不同的資料型別...