資料結構、資料類型和抽象資料類型,這三個術語在字面上既不同又相近,反映出它們在含義上既有區別又有聯絡。
資料結構是在整個電腦科學與技術領域上廣泛被使用的術語。它用來反映一個資料的內部構成,即一個資料由哪些成分資料構成,以什麼方式構成,呈什麼結構。資料結構有邏輯上的資料結構和物理上的資料結構之分。邏輯上的資料結構反映成分資料之間的邏輯關係,物理上的資料結構反映成分資料在電腦內的儲存安排。資料結構是資料存在的形式。
資料是按照資料結構分類的,具有相同資料結構的資料屬同一類。同一類資料的全體稱為一個資料類型。在程式設計進階語言中,資料類型用來說明一個資料在資料分類中的歸屬。它是資料的一種屬性。這個屬性限定了該資料的變化範圍。為瞭解題的需要,根據資料結構的種類,進階語言定義了一系列的資料類型。不同的進階語言所定義的資料類型不盡相同。Pascal語言所定義的資料類型的種類1-8所示
其中,單一資料型別對應於簡單的資料結構;構造資料類型對應於複雜的資料結構;在複雜的資料結構裡,允許成分資料本身具有複雜的資料結構,因而,構造資料類型允許複合嵌套;指標類型對應於資料結構中成分資料之間的關係,表面上屬單一資料型別,實際上都指向複雜的成分資料即構造資料類型中的資料,因此這裡沒有把它劃入單一資料型別,也沒有劃入構造資料類型,而單獨划出一類。
資料結構反映資料內部的構成方式,它常常用一個結構圖來描述:資料中的每一項成分資料被看作一個結點,並用方框或圓圈表示,成分資料之間的關係用相應的結點之間帶箭號的連線表示。如果成分資料本身又有它自身的結構,則結構出現嵌套。這裡嵌套還允許是遞迴的嵌套。
由於指標資料的引入,使構造各種複雜的資料結構成為可能。按資料結構中的成分資料之間的關係,資料結構有線性與非線性之分。在非線性資料結構中又有層次與網狀之分。由於資料類型是按照資料結構劃分的,因此,一類資料結構對應著一種資料類型。資料類型按照該類型中的資料所呈現的結構也有線性與非線性之分,層次與網狀之分。一個資料變數,在進階語言中的類型說明必須是讀變數所具有的資料結構所對應的資料類型。
最常用的資料結構是數組結構和記錄結構。數組結構的特點是:
成分資料的個數固定,它們之間的邏輯關係由成分資料的序號(或叫數組的下標)來體現。這些成分資料按照序號的先後順序一個挨一個地排列起來。
每一個成分資料具有相同的結構(可以是簡單結構,也可以是複雜結構),因而屬於同一個資料類型(相應地是單一資料型別或構造資料類型)。這種同一的資料類型稱為基底類型。
所有的成分資料被依序安排在一片連續的儲存單元中。
概括起來,數組結構是一個線性、均勻的、其成分資料可隨機訪問的結構。由於這種結構有這些良好的特性,所以最常被人們所採用。在進階語言中,與數組結構相對應的資料類型是數群組類型,即數組結構的資料變數必須說明為array [i] of T0 ,其中i是數組結構的下標類型,而T0是數組結構的基底類型。
記錄結構是另一種常用的資料結構。它的特點是:
與數組結構一樣,成分資料的個數固定。但成分資料之間沒有自然序,它們處於平等地位。每一個成分資料被稱為一個域並賦予網域名稱。不同的域有不同的網域名稱。
不同的域允許有不同的結構,因而允許屬於不同的資料類型。
與數組結構一樣,它們可以隨機訪問,但訪問的途徑靠的是網域名稱。
在進階語言中記錄結構對應的資料類型是記錄類型。記錄結構的資料的變數必須說明為記錄類型。
抽象資料類型的含義在上一段已作了專門敘述。它可理解為資料類型的進一步抽象。即把資料類型和資料類型上的運算捆在一起,進行封裝。引入抽象資料類型的目的是把資料類型的表示和資料類型上運算的實現與這些資料類型和運算在程式中的引用隔開,使它們相互獨立。對於抽象資料類型的描述,除了必須描述它的資料結構外,還必須描述定義在它上面的運算(過程或函數)。抽象資料類型上已定義流程和函數以該抽象資料類型的資料所應具有的資料結構為基礎。