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