那再說什麼是抽象呢?
抽象,抽象的意思就是「不具體」,就是說,描述資料型別的方法是不依賴於具體的實現的,對乙個資料型別的描述,它跟總體來說,我們只描述資料物件集和相關的操作集"是什麼",我們不關心「它是怎麼做到的」這個問題。可能到現在一些沒有基礎的朋友看起來還是很抽象,沒關係,我再舉個例子,可能幫助你更好的理解抽象資料型別到底是個什麼東西,這個例子是關於「矩陣」的抽象資料型別的定義。
首先我們要給這個抽象資料型別乙個名稱叫「矩陣」,然後我們要描述一下它的資料物件集,乙個nm的矩陣,是由nm個矩陣的元素構成的,我們把這個元素描述成乙個三元組a,i,j,其中a是這個矩陣元素的值,同時我們還需要知道這個矩陣元素在矩陣裡面所處的位置,就是它的行號i和列號j,就這樣描述了乙個資料的物件集,相關聯的操作集有很多很多(如下圖)
我們來看一下,為什麼這個就叫做「抽象」的表示呢?首先我們來看,在描述資料物件集的時候,說a是矩陣元素的值,那這個值是float?還是double?還是int?我們在這個抽象資料型別中描述是不關心的,相應地,當需要對它的元素值進行操作的時候,我們返回的也是elementtype,是乙個通用的元素型別,我在實現這個矩陣相關的所有函式的時候,我在頭上寫乙個define,你需要什麼,我就把它define(定義)成什麼樣子,這樣的話,你實現的這些函式是跟「你那個矩陣元素到底是哪種型別」是沒有關係的,哪種型別都是可以運算的。這就避免了你對int實現了一遍,下一次矩陣變成double型別的,結果你又對double……難道重新寫一遍嗎?當然你說我可以直接用乙個replace(替換),我把所有的int替換成double,呃……這個你要注意,有些地方的int真的就是int,你不能換成double,所以可能會出錯,總的來說呢,就是如果你自己乙個乙個地去替換這個元素的型別的話,會很麻煩,而抽象一下就是有這個好處,這是乙個好處。另外乙個呢,像這個矩陣,我們只是說這是乙個m*n的矩陣,至於在程式裡面它是怎樣乙個存法?我們是用二維陣列去存它?還是一維陣列?還是用鍊錶?這個我們在抽象資料型別定義的時候,都是不關心的。我不管它是怎麼實現的,我只是說:我要實現的是乙個矩陣。再比如說上面中的add()函式,如果它們可以相加的話,我要返回它們的和,那我可沒說,在我算這個矩陣加法的時候,到底是先按行加呢?還是先按列加呢?我到底是用什麼語言去實現這個函式呢?統統不管,這就是所謂的抽象。
到這抽象資料型別就說完了,其實這一篇就是對資料結構的另一種描述,我想看到這的話朋友們應該對資料結構有個清晰的認識了吧。提前做個預告,下篇就開始說演算法了,跟之前一樣,我會清清楚楚描述,明明白白表達,我相信我的認真配得上您的關注。
【原創宣告】:本人原創:
二 什麼是抽象資料型別
那再說什麼是抽象呢?抽象,抽象的意思就是 不具體 就是說,描述資料型別的方法是不依賴於具體的實現的,對乙個資料型別的描述,它跟 總體來說,我們只描述資料物件集和相關的操作集 是什麼 我們不關心 它是怎麼做到的 這個問題。可能到現在一些沒有基礎的朋友看起來還是很抽象,沒關係,我再舉個例子,可能幫助你更...
抽象資料型別
本篇文章簡單的講解下表 棧 佇列。首先先了解一下什麼是抽象資料型別。它是這麼定義的 抽象資料型別 abstract data type,即adt 是帶有一組操作的一些物件的集合。那麼adt怎麼理解呢?首先你只需要記住表 集合 圖以及與他們各自的操作一起形成的物件都可以被看做抽象資料型別.這就跟整型 ...
抽象資料型別 表
資料結構與演算法分析.c 實現 總結 抽象資料型別 abstract data type,首先顧名思義,她是一種資料型別,就像整數 字元,類似於加減乘除,他有自己的操作,例如 並和查詢 並沒有什麼法則規定一定要有什麼操作,具體的看設計要求 每種資料型別的實現方式也是不同的,主要有 陣列實現和鍊錶實現...