數組和廣義表

數組和廣義表

1、數組

1.定義

數組是數據結構的基本結構形式,它是一種順序式的結構。java

數組是存儲同一類型數據的數據結構,使用數組時須要定義數組的大小和存儲數據的數據類型。算法

2.分類

數組分爲一維數組和多維數組,數組的維數由數組下標的個數肯定的。數組

能夠說數組是有限個同類型數據元素組成的序列。數據結構

1>一維數組

一維數組是指下標的個數只有一個的數組,有時稱爲向量,是最基本的數據類型。.net

一維數組的數據存儲按照順序存儲,邏輯地址和物理地址都是連續的。3d

2>多維數組

多維數組是指下標的個數有兩個或兩個以上。咱們比較經常使用的是二維數組。由於三維一項的數組存儲能夠簡化爲二維數組的存儲。指針

以二維數組爲例,二維數組在順序存儲時通常有兩種:blog

  • 第一種行優先順序:存儲時先按行從小到大的順序存儲,在每一行中按列號從小到大存儲。
  • 第二種列優先順序:存儲時先按列從小到大的順序存儲,在每一列中按行號從小到大存儲。

2、矩陣的存儲

1.壓縮存儲

矩陣的壓縮存儲就是存儲數組時,儘可能減小存儲空間,但數組中每一個元素必須存儲。遞歸

在矩陣中,若是有規律可尋,只要存儲其中一部分,而另一部分的存儲地址能夠經過相應的算法將它計算出來,從而佔有較少的存儲空間達到存儲整個矩陣的目的。隊列

矩陣的壓縮存儲僅能針對特殊矩陣使用,對於沒有規律可循的二維數組則不能使用。

二維數組的壓縮存儲通常分爲3種,它們分別是對稱矩陣、稀疏矩陣和三角矩陣。

2.對稱矩陣

若n階矩陣A中的元素知足如下條件:aij=aji,i≥1,j≥1,則成爲n階對稱矩陣。

對於對稱矩陣若是不採用壓縮存儲,佔用的存儲單元爲n*n個,由於是對稱矩陣,因此只要存儲對角的數據元素和通常的數據元素便可,佔用的存儲單元有n*(n-1)/2個。

對角矩陣是指矩陣的全部非零元素都集中在以主對角線爲中心的帶狀區域中,即除了主對角線上和直接在主對角線上、下方若干條對角線上的元素以外,其他元素皆爲零。

3.稀疏矩陣

對稀疏矩陣很難下一個確切的定義,它只是一個憑人們的直覺來理解的概念。

通常認爲,一個較大的矩陣中,零元素的個數相對於整個矩陣元素的總個數所佔比例較大時,該矩陣就是一個稀疏矩陣。

稀疏矩陣的壓縮存儲採用三元組的方法實現。其存儲規則是每個非零元素佔有一行,每行中包含非零元素所在的行號、列號、非零元素的數值。

爲完整描述稀疏矩陣,通常在第一行描述矩陣的行數、列數和非零元素的個數。其邏輯描述爲(即三元組存儲方式):(row col value)其中row表示行號,col表示列號,value表示非零元素的值。 以下圖是一種稀疏矩陣的三元組存儲形式:

原始數據: 三元組存儲形式:

第一行表示矩陣的數據總數:5行、6列、4個值。 第二行表示數據的位置及內容:2行、2列、值爲3。 第三行、第四行依次類推。 首先應該將稀疏矩陣轉換爲三元組存儲,而後再利用三元組的存儲,實現對矩陣的各類運算。

在Java中,除了一下兩點之外,向量與數組徹底相同:

  • 第一:一個向量是類java.util.Vector的實例
  • 第二:一個向量的長度能夠改變。

3、廣義表

1.定義

廣義表是線性表的擴展,具體定義爲n(n≥0)個元素的有限集合。

n的值是廣義表的長度,若是n=0稱廣義表爲空表。

廣義表的數據元素有兩種類型:一個是不可再分的元素(原子元素);一個是能夠再分的元素(子表)。

若是全部的元素都是原子元素,則稱爲線性表。

若是數據元素中含有子表元素,則稱爲廣義表。

廣義表通常記做:LS=(a1,a2,……,an)

常見的廣義表爲:A=()、B=(())、C=(a,b)、D=(A,B,C)、E=(a,E)

廣義表中含有元素的個數稱爲廣義表的長度,廣義表中含有的括號對數稱爲廣義表的深度。

廣義表有三個重要的特色:

  • 第一:廣義表的元素能夠是子表,而子表的元素還能夠是子表,廣義表是一個多層次的結構。
  • 第二:廣義表能夠爲其餘廣義表所共享。
  • 第三:廣義表能夠是一個遞歸表,即表也能夠是其自己的一個子表。

廣義表的表頭是廣義表中的第一個元素,而表尾則是去掉表頭以後的全部元素。

廣義表中一般利用求表頭和表尾運算求得廣義表中某個元素的值。

2.存儲方式

廣義表的存儲方法有不少種,通常採用鏈表存儲。採用鏈表存儲時的結點存儲的邏輯結構以下圖:

flag表示標誌位。當flag爲0時,表示該結點爲原子元素,info表示原子元素的值;當flag爲1時表示該結點爲子表,info表示指針,指向該子表的第一個結點。 link表示指針,指向廣義表的下一個元素。 例如:廣義表A=(a,(b,(c)),(d,e),f),利用鏈表存儲的邏輯圖以下:

廣義表能夠採用多種方式實現,最簡單的方法是使用數組實現。

上一篇:隊列(queue)

下一篇:樹(tree)

相關文章
相關標籤/搜索