5.1數組的定義
定義:
由一組類型相同的數據元素構成的有序集合,每個數據元素稱為一個數據元素(簡稱元素),每個元素受n(n>=1)個線性關系的約束,每個元素在n個線性關系中的序號i1、i2…in稱為元素的下標,并稱為n元數組
二維數組是數據元素為線性表的線性表
數組沒有插入和刪除操作:因為數組一旦被定義,它的維數和維界就不再改變
數組的基本操作:
1.存取:給定一組下標,讀出對應的數組元素
2.修改:給定一組下標,存儲或修改與其相對應的數組元素
存取和修改操作本質上只對應一種操作:尋址
存儲方式:沒有插入刪除操作,故不用預留空間,不適合采用順序存儲
5.2數組的順序表示和實現----- 一維數組
設一維數組的下標范圍為閉區間[l,h],每個數組元素占用c個存儲單元,則其任一元素ai的存儲地址為: Loc(ai)=Loc(aL)+(i-L)*c
由于內存空間是一維的,將二維數組表示為一維結構的方法有:
1.按航有線:先行后列,先存儲行號較小的元素,行號相同者先存儲列號較小的元素
2.按列優先:先列后行,先存儲列號較小的元素,列號相同者先存儲行號較小的元素
第aij個元素前面的元素個數
=整行數每行表示的元素個數+本行中aij前面的元素個數
=(i-L1)(h2-L2+1)+(j-L2)
尋址:
按行優先存儲的尋址:
Loc(aij)
=Loc(L1L2)+aij之前的元素個數L // Loc(L1L2)為存儲的第一個元素的位置
=Loc(L1L2)+((i-L1)(h2-L2+1)+(j-L2) )*c //每個元素占c個單元
三維數組:
a[m1][m2][m3]: //m1為頁數,m2 m3分別為行數和列數
LOC(i1,i2,i3)
=起始地址+前i1頁總元素個數+第i1頁的前i2行總元素個數+第i2行前i3列元素個數
= a + i1m2m3 + i2*m3+i3
n維數組
5.3矩陣的壓縮存儲
*特殊矩陣:包括對稱矩陣,三角矩陣,對角矩陣,和稀疏矩陣
*系數矩陣:矩陣中有很多零元素
壓縮矩陣的基本思想:
為多個值相同的元素只分配一個存儲空間
對0元素不分配存儲空間
壓縮對稱矩陣: 特點:aij=aji
只存儲下三角部分的元素**【默認】**
令數組下標從0開始時:aij在一維數組的下標就是該元素前面元素的個數,即ak中k=i*(i+1)/2+j
對下三角中的元素aij(i>=j),在數組SA中的下標k與i,j的關系為:k=i(i+1)/2+j
上三角中的元素aij(i<j),因為aij=aji,則訪問和他對應的元素aji即可,即k=j(j+1)/2+i // 【i和j誰大誰在前面