數組能夠看做線性表的推廣。數組做爲一種數據結構其特色是結構中的元素自己能夠是具備某種結構的數據,但屬於同一數據類型,數組是一個具備固定格式和數量的數據有序集, 每個數據元素有惟一的一組下標來標識,所以,在數組上不能作插入、刪除數據元素的操做。 數組
( 1 )數組的定義數據結構
從邏輯結構上,數組能夠當作是通常線性表的擴充。一維數組即爲線性表, 而二維數組能夠定義爲「其數據元素爲一維數組(線性表)」的線性表。依此類推, 便可獲得多維數組的定義。N 維數組是「數據元素爲 N-1 維數組」的線性表。函數
由數組結構能夠看出,數組中的每個元素由一個值和一組下標來描述。 「值」表明數組中元素的數據信息,一組下標用來描述該元素在數組中的相對位 置信息。數組的維數不一樣,描述其相對位置的下標的個數也不一樣。spa
( 2 )數組的運算blog
數組是一組有固定個數的元素的集合。即,一旦定義了數組的維數和每一維 的上、下限,數組中元素的的個數就固定了。例如二維數組 A3 × 4 ,它有 3 行、 4 列,即由 12 個元素組成。因爲這個性質,使得對數組的操做不像對線性表的操做 那樣能夠在表中任意一個合法的位置插入或刪除一個元素。對於數組的操做通常 只有兩類: ①得到特定位置的元素值; ②修改特定位置的元素值。 所以數組的操做主要是數據元素的定位,即給定元素的下標,獲得該元素在 計算機中的存放位置。其本質上就是地址計算問題。內存
( 3 )數組的抽象數據類型定義數學
數組的抽象數據類型定義以下: ADT Array{變量
注意:這裏定義的數組與 C 語言的數組略有不一樣,下標統一從 1 開始。數據類型
一般在各類高級語言中數組一旦被定義,每一維的大小及上下界都不能改變。方法
一般,數組在內存被映象爲向量,即用向量做 爲數組的一種存儲結構,這是由於內存的地址空間是一維的,數組的行列固定後,經過一個 映象函數,則可根據數組元素的下標獲得它的存儲地址。
對於一維數組按下標順序分配便可。對多維數組分配時,要把它的元素映象存儲在一維存儲器中,通常有兩種存儲方式:一是以行爲主序(或先行後列)的順序存放,另外一種是以列爲主序(先列後行)的順序存放。
設有 m×n 二維數組 Amn,下面咱們看按元素的下標求其地址的計算:
以「以行爲主序」的分配爲例:設數組的基址爲 LOC(a11),每一個數組元素佔據 d 個地址單 元,那麼 aij 的物理地址可用一線性尋址函數計算:
LOC(aij) = LOC(a11) + ( (i-1)*n + j-1 ) * d
這是由於數組元素 aij的前面有 i-1 行,每一行的元素個數爲 n,在第 i 行中它的前面還有 j-1 個數組元素。
在 C 語言中,數組中每一維的下界定義爲 0,則: LOC(aij) = LOC(a00) + ( i*n + j ) * d 推廣到通常的二維數組:A[c1...d1][c2...d2],則 aij的物理地址計算函數爲:
LOC(aij)=LOC(a c1 c2)+( (i- c1) *( d2 - c2 + 1)+ (j- c2) )d
元素分佈具備必定規律的矩陣稱爲規律分佈的特殊矩陣,如三角矩陣(方陣的上或下三 角全爲零)和帶狀矩陣(若干條對角線含有非零元)。這類矩陣中元素分佈的規律能夠用數學公 式來反映。已知二維矩陣 A 中元素下標 i 和 j,做爲轉換函數 f 的自變量,計算出到一維內存空 間的地址值 K,即 A i=B[ K],實現了原二維矩陣到壓縮存儲後的一維數組的存儲映射。
1 .三角矩陣
三角矩陣大致分爲三類:下三角矩陣、上三角矩陣、對稱矩陣。對於一個 n 階矩陣 A 來 說:若當 i <j 時,有 a ij =c(典型狀況 c=0 ),則稱此矩陣爲下三角矩陣;若當 i>j 時,有 aij =c(典型情 況 c=0 ),則稱此矩陣爲上三角矩陣;若矩陣中的全部元素均知足 aij =aji,則稱此矩陣爲對稱矩 陣。
2 .帶狀矩陣
( 1 )帶狀矩陣描述:在矩陣中的全部非零元素都集中在以主對角線爲中心的帶狀區域中。
( 2 )三對角帶狀矩陣特色
( 3 )三對角帶狀矩陣壓縮存儲方法
三對角帶狀矩陣的壓縮存儲原則爲:將帶狀區域上的非零元素按行序存儲。
其壓縮存儲方法以下:
①肯定存儲該矩陣所需的一維向量空間的大小 假設每一個非零元素所佔空間的大小爲 size 個單元。從圖 3 中觀察得知,在三對角帶狀矩 陣中,除了第一行和最後一行只有2個非零元素外,其他各行均有3個非零元素,由此獲得:所需 一維向量空間的大小爲: 2 +2 +3 ×( n -2 )= 3 n-2 。
②肯定非零元素在一維數組空間中的地址 Loc ( A i)= Loc ( A 1 )+(前 i-1 行非零元素個數+第 i 行中 aij 前非零元素個 數)*size 前 i-1 行元素個數=3 ×( i-1 )- 1 (由於第 1 行只有 2 個非零元素); 第 i 行中 ai j 前非零元素個數=j-i +1 ,其中
由此獲得: Loc ( A i)= Loc( A 1 )+( 3 ( i-1 )- 1 +j-i +1)size = Loc( A 1 )+( 2 ( i-1 )+ j -1)size