數(shù)組的定義和運算
C語言支持一維數(shù)組和多維數(shù)組嘴瓤。如果一個數(shù)組的所有元素都不是數(shù)組扫外,那么該數(shù)組稱為一維數(shù)組。
在java中數(shù)組被看成是一個對象筛谚,在定義數(shù)組時,有兩種定義方法:int[] a 和int a[]刻获;第二種是C/C++對數(shù)組定義方式,對于JAVA建議采用第一種定義方式瞎嬉。
n維數(shù)組中的元素,每一個元素都受著n個關系的約束氧枣,在每個關系中,數(shù)據(jù)元素都有一個直接的后繼元素便监,因此在這個 n個關系中的任一關系扎谎,就其單個關系而言烧董,仍是線性的關系毁靶。
當n=1時;n維數(shù)組的定義就銳化為線性表的定義预吆。反之,n維數(shù)組也可以看成是線性表的推廣胳泉。
二維數(shù)組可以看成是每個數(shù)據(jù)元素是一個線性表岩遗。
一個三維數(shù)組可以用其數(shù)據(jù)元素為二維的線性表來定義。
由此可見n維數(shù)組是一種較為復雜的數(shù)據(jù)結構凤瘦,但它可以由簡單數(shù)據(jù)結構--線性表輾轉合成而得。n維數(shù)組是一種“同構”的數(shù)據(jù)結構蔬芥,即它的每個數(shù)據(jù)元素的數(shù)據(jù)類型相同梆靖。
數(shù)組的兩種操作:
(1)給定一組下標笔诵,存取相應的數(shù)據(jù)元素返吻;
(2)給定一組下標嗤放,修改相應的數(shù)據(jù)元素中的某一個或者幾個數(shù)據(jù)項的值思喊;
數(shù)組的順序存儲結構
由于數(shù)組一般不做插入或者刪除的操作,一旦建立了數(shù)組恨课,則結構中的數(shù)據(jù)元素個數(shù)和元素之間的關系就不在發(fā)生變動,因此采用順序存儲結構表示數(shù)組是自然的事岳服。
由于存儲單元是一維的結構,而數(shù)組是一個多維的結構吊宋,則用一組連續(xù)的存儲單元存放數(shù)組的數(shù)據(jù)元素就有次序的約定的問題纲辽,例如對于二維數(shù)組的存儲方式璃搜,一種是以列序為主序存儲拖吼,另一種是以行序為主序存儲。
矩陣的壓縮存儲
矩陣是很多科學與工程計算問題中研究的數(shù)學對象吊档,如何存儲矩陣的元,使得矩陣的各種運算能夠有效的進行唾糯。通常的高級語言編制程序時怠硼,都是用二維數(shù)組來存儲矩陣的元移怯,有的語言中還提供了各種矩陣的運算香璃,方便用戶使用舟误。
數(shù)值分析中經(jīng)常出現(xiàn)一些階數(shù)很高的矩陣葡秒,同時在矩陣中有很多值相同的元素,或者零元素同云。有時為了節(jié)省存儲空間糖权,可以對此類的矩陣進行壓縮存儲堵腹。壓縮存儲是指,為多個值相同的元只分配一個存儲空間疚顷。
特殊矩陣
假若值相同的元素或者零元素在矩陣中的分布有一定的規(guī)律旱易,我們稱這種矩陣為特殊矩陣腿堤,反之為稀疏矩陣阀坏。
對稱矩陣
對于對稱矩陣笆檀,我們可以為每一對對稱元分配一個存儲空間忌堂,則可以將n的平方個元壓縮存儲到n(n+1)/2個元的空間中。
以下例子引用http://c.biancheng.net/cpp/html/966.html
對稱矩陣的特點是:在一個n 階方陣中士修,有aij=aji ,其中1≤i , j≤n樱衷,如圖5.5 所示是一個5階對稱矩陣。對稱矩陣關于主對角線對稱矩桂,因此只需存儲上三角或下三角部分即可沸移,比如侄榴,我們只存儲下三角中的元素aij雹锣,其特點是中j≤i 且1≤i≤n,對于上三角中的元素aij 蕊爵,它和對應的aji 相等,因此當訪問的元素在上三角時涣达,直接去訪問和它對應的下三角元素即可,這樣度苔,原來需要nn 個存儲單元匆篓,現(xiàn)在只需要n(n+1)/2 個存儲單元了,節(jié)約了n(n-1)/2個存儲單元鸦概,當n 較大時,這是可觀的一部分存儲資源。
如何只存儲下三角部分呢窗市?對下三角部分以行為主序順序存儲到一個向量中去,在下三角中共有n(n+1)/2 個元素咨察,因此论熙,不失一般性摄狱,設存儲到向量SA[n(n+1)/2]中脓诡,存儲順序可用圖5.6 示意媒役,這樣祝谚,原矩陣下三角中的某一個元素aij 則具體對應一個sak,下面的問題是要找到k 與i交惯、j 之間的關系。
角中的元素aij穿仪,其特點是:i≥j 且1≤i≤n,存儲到SA 中后牡借,根據(jù)存儲原則拳昌,它前面有i-1行钠龙,共有1+2+…+i-1=i(i-1)/2 個元素炬藤,而aij 又是它所在的行中的第j 個,所以在上面的排列順序中碴里,aij 是第i(i-1)/2+j 個元素,因此它在SA 中的下標k 與i咬腋、j 的關系為:
k=i(i-1)/2+j-1 (0≤k<n(n+1)/2 )
若i<j羹膳,則aij 是上三角中的元素根竿,因為aij=aji 陵像,這樣寇壳,訪問上三角中的元素aij 時則去訪問和它對應的下三角中的aji 即可醒颖,因此將上式中的行列下標交換就是上三角中的元素在SA 中的對應關系:
k=j(j-1)/2+i-1 (0≤k<n(n+1)/2 )
對角矩陣
所有的非零元都集中在以對角線為中心的帶狀區(qū)域中。
對于一個矩陣結構顯然用一個二維數(shù)組來表示是非常恰當?shù)呐⑶福谟行┣闆r下,比如常見的一些特殊矩陣,如三角矩陣腰耙、對稱矩陣、帶狀矩陣挺庞、稀疏矩陣等晰赞,從節(jié)約存儲空間的角度考慮挠阁,這種存儲是不太合適的宾肺。下面從這一角度來考慮這些特殊矩陣的存儲方法侵俗。
稀疏矩陣
按照壓縮存儲的概念,只存儲稀疏矩陣的非零元丰刊,同時記下她所在的行列的位置。