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