圖例爲你講解抽象數據類型——我用心寫,您用心「品」

【二】、什麼是抽象數據類型

前言

在上一篇【什麼是數據結構】中我詳細介紹了我對數據結構的理解,其實描述數據結構,有一個很好的方法叫抽象數據類型。下面我會詳細介紹抽象數據類型html

抽象數據類型

抽象數據類型英文名叫(Abstract Data Type),這裏有兩個關鍵詞,一個叫「數據類型」,一個叫「抽象」,它們分別是什麼意思呢?首先說什麼是數據類型呢?算法

數據類型,它包含了兩個東西,一個是「數據對象集」,就是咱們說的「是什麼東西」,第二個是「數據集合相關聯的操做集」,就上我在上一篇中說的,咱們不能單純講怎麼去處理圖書,咱們是要對這些圖書進行操做的,這兩件事情:圖書的擺放,對圖書的操做,是緊密結合在一塊兒的。這兩個東西在C語言裏是獨立處理的,可是在一些面向對象的語言裏邊,好比C++、Java,你就會發現,它們很好的爲數據類型專門設計了一種機制,就是一個「」,把這個數據集跟它相關的操做集封裝在一個類裏面。編程

那再說什麼是抽象呢?數組

抽象,抽象的意思就是「不具體」,就是說,描述數據類型的方法是不依賴於具體的實現的,對一個數據類型的描述,它跟數據結構

  • 存放數據的機器無關
  • 跟數據存儲的物理結構無關
  • 實現操做的算法和編程語言皆無關

整體來講,咱們只描述數據對象集和相關的操做集"是什麼",咱們不關心「它是怎麼作到的」這個問題。可能到如今一些沒有基礎的朋友看起來仍是很抽象,不要緊,我再舉個例子,可能幫助你更好的理解抽象數據類型究竟是個什麼東西,這個例子是關於「矩陣」的抽象數據類型的定義。編程語言


首先咱們要給這個抽象數據類型一個名稱叫「矩陣」,而後咱們要描述一下它的數據對象集,一個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()函數,若是它們能夠相加的話,我要返回它們的和,那我可沒說,在我算這個矩陣加法的時候,究竟是先按行加呢?仍是先按列加呢?我究竟是用什麼語言去實現這個函數呢?通通無論,這就是所謂的抽象。函數

 

此篇完

到這抽象數據類型就說完了,其實這一篇就是對數據結構的另外一種描述,我想看到這的話朋友們應該對數據結構有個清晰的認識了吧。提早作個預告,下篇就開始說算法了,跟以前同樣,我會清清楚楚描述,明明白白表達,我相信個人認真配得上您的關注。spa

 【原創聲明】:本人原創:https://www.cnblogs.com/zyx110/設計

相關文章
相關標籤/搜索