很多小伙伴在翻開數(shù)據(jù)結構的第一節(jié)課,聽到的就是一個名為抽象數(shù)據(jù)類型(Abstract Data Type,ADT)的概念,而有些教材對這個概念的介紹過于書面化,今天小編就來簡單的用比較輕松的方式來介紹一下這個概念吧。
來自課本的介紹(內(nèi)容截取自百度百科相關詞條)
抽象數(shù)據(jù)類型( ADT,Abstract Data Type)是指一個數(shù)學模型以及定義在此數(shù)學模型上的一組操作。它通常是對數(shù)據(jù)的某種抽象,定義了數(shù)據(jù)的取值范圍及其結構形式,以及對數(shù)據(jù)操作的集合。以復數(shù)為例,它的抽象數(shù)據(jù)類型如下:
ADT complex{
數(shù)據(jù)對象:D={real, image | real∈實數(shù), image∈實數(shù)} [3]
數(shù)據(jù)關系:R={<real,image>} [3]
基本操作: [3]
InitComplex(&C)
操作結果:構造一個復數(shù)。
GetReal(C, &real)
初始條件:復數(shù)C存在。
操作結果:用real返回復數(shù)C的實部。
GetImage(C, &image)
初始條件:復數(shù)C存在。
操作結果:用image返回復數(shù)C的虛部。
OutputComplex(C)
初始條件:復數(shù)C存在。
操作結果:輸出復數(shù)C的值。
Add(C1,C2,&C)
初始條件:復數(shù)C1,C2存在。
操作結果:用復數(shù)C返回復數(shù)C1,C2的和。
Sub(C1,C2,&C)
初始條件:復數(shù)C1,C2存在。
操作結果:用復數(shù)C返回復數(shù)C1,C2的差。
Mul(C1,C2,&C)
初始條件:復數(shù)C1,C2存在。
操作結果:用復數(shù)C返回復數(shù)C1,C2的乘積。
Div(C1,C2,&C)
初始條件:復數(shù)C1,C2存在。
操作結果:用復數(shù)C返回復數(shù)C1除以C2的值。
}ADT Complex
小編的介紹
看到上面的抽象數(shù)據(jù)類型,是不是感覺很抽象?實際上ADT就介紹了三件事情:數(shù)據(jù)本身,數(shù)據(jù)與數(shù)據(jù)之間的關系,以及你能對這些數(shù)據(jù)進行的操作。以我們的理解,復數(shù)的抽象數(shù)據(jù)類型里面的內(nèi)容,也就是一個復數(shù)應該怎么組成,根據(jù)復數(shù)的相關知識,我們知道復數(shù)有實部和虛部組成,虛部由一個有理數(shù)*i組成,所以一個復數(shù)應該有存儲一個實部的數(shù)據(jù),一個虛部的數(shù)據(jù),這也就對應了上面ADT中數(shù)據(jù)對象的內(nèi)容,這就是數(shù)據(jù)本身。
我們知道一個復數(shù)的抽象數(shù)據(jù)類型中有兩個數(shù),一個是實部,一個是虛部,那么實部和虛部的數(shù)據(jù)有什么關系呢?就是上面的那種關系,也就是實部和虛部組合成一個復數(shù)。
關于復數(shù)的操作,我們定義在基本操作中,比如我們需要這個數(shù)據(jù)結構能夠查看實部,查看虛部,復數(shù)運算等,都可以定義在這里。
有了這樣的一個抽象數(shù)據(jù)類型,我們就可以知道怎么去實現(xiàn)一個復數(shù)對象,以及這個復數(shù)對象需要哪些操作了。(實際上ADT中的操作可以不用全部實現(xiàn),這樣可以減少自己的開發(fā)量也可以減少代碼量,不過這樣的數(shù)據(jù)結構只能專屬于這個代碼,并不能通用)
如果小伙伴有接觸過面向對象的相關概念,你會發(fā)現(xiàn)ADT和對象具有很高的相似之處,比如他們都有屬性(數(shù)據(jù)對象)和對屬性操作的方法(基本操作),ADT中多了數(shù)據(jù)與數(shù)據(jù)之間的關系,但這個在對象中也可以進行定義。
小結
以上就是ADT全部內(nèi)容了,十分遺憾的是關于數(shù)據(jù)結構和算法的內(nèi)容本站并沒有收錄相關手冊,不過本站的技術頭條內(nèi)有很多算法相關的文章,小編也會繼續(xù)給小伙伴分享數(shù)據(jù)結構相關的知識,希望小伙伴們繼續(xù)關注W3Cschool后續(xù)文章!