謝琪林 攀枝花學院 智能制造學院
在編程語言中存在數(shù)據(jù)結(jié)構(gòu)(Abstract Data Type,ADT)這樣的一門學科,很多初學者對抽象數(shù)據(jù)類型出現(xiàn)理解困難問題,應用無從談起的情況,今天我們一起來談談數(shù)據(jù)結(jié)構(gòu)C 語言實現(xiàn)的正確認識以及初步的應用。
抽象數(shù)據(jù)類型這個概念有兩個關鍵字,即:抽象,和數(shù)據(jù)類型。我們先來談談C 語言環(huán)境下數(shù)據(jù)類型的概念。
數(shù)據(jù)類型:一組性質(zhì)相同的值的集合以及定義在此集合上的一些操作的總稱。此中有集合與操作兩個關鍵字。
什么性質(zhì)相同的值的集合?就是一類數(shù)據(jù)?;緮?shù)據(jù)類型被人做是最基本地,不可再劃分的數(shù)據(jù),一般就是整形、浮點型性質(zhì)相同的值的集合在C 語言中包括:
在C 語言中,按照取值不同,數(shù)據(jù)類型可分為兩類:
①、原子類型:是不可再分解的基本類型,包括整型、實型、字符型等。
②、結(jié)構(gòu)類型:由若干的類型組合而成,是可以再分解的。例如:整型數(shù)組是由若干整型數(shù)據(jù)組合而成的。
比如:在C 語言中,聲明變量int a,b,這就意味著在給變量a、b 賦值時不能超出int 的取值范圍,變量a 和b 的運算只能是int 類型所允許的運算。
其對應的操作有:
數(shù)據(jù)類型按值的不同進行劃分。在高級語言中,每個變量、常量及表達式都有各自的取值范圍,類型就用來說明變量或表達式的取值范圍和所能進行的操作。
無論是什么計算機或計算機語言都會面臨著整型運算、實數(shù)運算、字符運算等操作,我們可以考慮把他們抽象出來。
那么抽象是指抽取出事物具有普遍性的本質(zhì)。它是抽出問題的特征而忽略非本質(zhì)的細節(jié),是對具體事物的一個概括。抽象是一種思考問題的方式,它隱藏了復雜的細節(jié),只保留了實現(xiàn)目標所必須的信息。
ADT 是指一個數(shù)學模型以及定義在這個模型上的一組操作,其定義僅僅取決于它的一組邏輯特性,而與它在計算機中的表示和實現(xiàn)無關。其作用比如你要實現(xiàn)對一個班級同學信息管理的系統(tǒng),如果你只用基本數(shù)據(jù)類型那么你需要定義很多數(shù)據(jù)類型的變量比如名字、性別、出生地、生日之類的,操作起來不是非常方便,但用抽象數(shù)據(jù)來實現(xiàn)就簡單了,直接把這些信息放包裝在一個新的數(shù)據(jù)類型中,然后就可以直接定義這樣的一個變量就可以了。所以我們可以得出結(jié)論:ADT 和數(shù)據(jù)類型在實質(zhì)上是一個概念,只不過是對數(shù)據(jù)類型的進一步抽象,不僅限于各種不同的計算機處理器中已經(jīng)實現(xiàn)的數(shù)據(jù)類型,還包括為解決更為復雜的問題而由用戶自定義的復雜數(shù)據(jù)類型,是一個數(shù)學模型以及定義在其上的一組操作組成,其一般的定義
例如,int 類型的數(shù)據(jù)表示的是整數(shù),可以進行加減乘除模等一些運算,int 類型數(shù)據(jù)的這些數(shù)學特性保持不變,那么在編程者來看,他們都是相同的。因此,數(shù)據(jù)抽象泛指除基本數(shù)據(jù)類型以外的數(shù)據(jù)類型。其意義在于數(shù)據(jù)類型的數(shù)學抽象特性。在C 語言中實現(xiàn)的具體形式就是結(jié)構(gòu)體,在C++就是類的定義。
例如,在統(tǒng)計學生信息時常使用姓名、學號、成績等信息,我們可以定義這樣的一個抽象數(shù)據(jù)類型student,它封裝了姓名、學號、成績?nèi)齻€不同類型的變量,這樣操作student 的變量就能夠很方便的知道這些信息了。C 語言中的結(jié)構(gòu)體以及C++、java 語言中的類等都是這種形式。
ADT 是由若干基本數(shù)據(jù)類型歸并之后形成的一種新的數(shù)據(jù)類型,這種類型由用戶定義,功能操作比基本數(shù)據(jù)類型更多,一般包括結(jié)構(gòu)體和類。其實說白了,ADT 就是把一些有一定關聯(lián)的基本數(shù)據(jù)類型打包,然后當做新的數(shù)據(jù)類型使用。
至于有什么用,這個用處可大了。比如你要實現(xiàn)對一個人地信息管理,如果你只用基本數(shù)據(jù)類型那么你需要定義很多數(shù)據(jù)類型的變量比如名字、性別、出生地、生日之類的,并且操作起來不方便。如果用抽象數(shù)據(jù)來實現(xiàn)就簡單了,直接把這些信息放包裝在一個新的數(shù)據(jù)類型中,然后就可以直接定義這樣的一個變量就可以了。