資料結構 陣列

2021-09-26 01:58:13 字數 2347 閱讀 1334

陣列:

1.陣列的概念:

陣列是下標與值組成的數偶的有限集合。在陣列中一旦給定下標,就存在乙個與之對應的值,這個值稱為資料元素。陣列可以看成線性表的推廣。

陣列一旦被定義,它的維數和維界就不再改變。陣列規模是固定的,稱之為靜態結構。

主要的操作:

1.給定乙個陣列下標,檢索對應的陣列元素

2.給定一組下標,存,取或者修改對應資料元素的值

3.檢索滿足條件的陣列元素

4.對陣列元素的所有元素按照值的大小進行公升序或者降序排序

陣列的儲存結構:一般情況下採用順序儲存結構。

若乙個陣列的每個元素佔k個儲存單元,並且從位址l0開始儲存第乙個元素,則陣列的第i個元素的儲存位置loc(ai)可以確定為:

loc(ai)=loc(a1)+(i-1)k=l0+(i-1)k

對於二維陣列來說,至少有兩種儲存方式來存放陣列,一種是以行為主序的方式,另一種是以列為主序的方式。

若已知元素a11的儲存位址為loc(a11),並且每個元素占用k個儲存單元,則陣列第i行第j列的元素的儲存位置:

loc(aij)=loc(a11)+(i-1)nk+(j-1)k

矩陣的壓縮儲存:

所謂的壓縮矩陣,是指為多個值相同的元素只分配乙個儲存空間,而對於值為0的元素不分配儲存空間。

對稱矩陣的壓縮儲存:

若乙個n階矩陣a的元素滿足性質

aij=aji 1<=i,j<=n

則該矩陣稱為乙個n階的對稱矩陣。在對稱矩陣中位於主對角線的元素值都相同。因此只需要對上(下)三角形 部分一共有n(n+1)/2個元素。

設一維陣列lta[0…n(n+1)/2-1]作為對稱矩陣a的儲存結構,那麼當a中任意元素aij與lta[k]之間的關係為:

i(i-1)/2+j-1 i>=j

k=j*(j-1)/2+i-1 irow col value link

row,col分別表示某非零元所在的行號和列號;value表示該非零元的值;link域用來指向下乙個非零元所在的節點,它是乙個指標。

為整個鍊錶設立乙個表頭

m n t link

m,n分別表示稀疏矩陣總的行數與總的列數;t為稀疏矩陣中非零元素的總個數;link域為指標域,用以指向第乙個非零元素對應的鏈結點。

缺點就是效率低

帶行指標向量的鍊錶儲存方法:

第二種是帶行指標向量的鍊錶結構。在這種鍊錶結構中,將具有相同行數的元素所對應的鏈結點按照列號從小到大的順序連線成為乙個線性鍊錶,也就是說稀疏矩陣的每一行對應乙個線性鍊錶。同時每一行設定乙個頭節點,頭節點中存放該行乙個個元素的位址。

十字鍊錶儲存方法:

演算法思想可以歸納為以下幾點:

1.建立max(m,n)個頭節點,此時,頭節點的right域與value域均指向頭節點本身

2.依次輸入三元組表的乙個三元組(row,col,value),同時申請乙個新的節點,分別將row,col與value送入新節點的相應域內,並將新節點分別連線到相應的行煉表和列鍊錶

3.當某一行的非零元素全部處理完畢,及時將該鍊錶封成乙個迴圈鍊錶。

4.將所有列鍊錶封裝成迴圈鍊錶

5.建立稀疏矩陣十字鍊錶的乙個總頭節點,並利用value域將總頭節點與各個鍊錶的頭節點連城乙個迴圈鍊錶,並設總頭節點為head。

陣列的應用舉例:

1.一元多項式的陣列表示

方法1:定義乙個一維陣列a[0,…n+1].其中a[0]用來存放多項式的an(x)的階數n;從第二個陣列元素a[1]到第n個陣列元素a[n+1]依次用來存放an(x)的n+1個係數an,an-1,…a1,a0.也就是說,多項式中各個係數以指數遞減順序進行儲存。

方法二:定義乙個一維陣列a[0,2m]來儲存多項式,其中,第乙個陣列元素a[0]存放多項式中係數非零項的總項數m(設非零 總項數為m);從第二個元素到第2m+1個元素(一共2m個資料元素)依次存放係數非零項的係數與數偶對(一共m個這樣的偶對)。

二.n階魔方

遊戲中要求將1~n2個數字不重複的填入乙個由n行,n列,共n2個方格組成的方陣中,使得方陣中的每一行,每一列及兩對角線的數字之和分別等於同乙個數,稱這個方陣為乙個n階魔方。這裡,設n為任意奇數。

規律如下:先將第乙個數「1」填入方陣中第一行位置居中的方格中。若用(i,j)分別表示方陣中(陣列中)某一位置的行座標與列座標,則第乙個數的位置為(0,n/2)。填入乙個數字後,將適合下乙個數字的位置修改到剛才已經填入的這個數的位置(i,j)的左上角位置(i1,j1)

(i1=i-1,j1=j-1),然後根據下面兩種情況做出修改,讓後將下乙個數填入修改後的位置。

1.若(i1,j1)位置已經填過數字,則修改i1為i1+2,修改j1為j1+1

2.若i1小於0,但是j1不小於零,修改i1為n-1;若j1小於零,但i1不小於0,則修改j1為n-1;若i1與j1同時小於0,則將i1修改為1,j1修改為0

資料結構 陣列

建立陣列 大小為50 棧空間存myarray引用 堆空間存乙個大小為50,預設值為0的陣列。棧空間myarray引用指向堆空間該陣列。int myarray new int 50 public class testarray public class testarray if s intarray....

資料結構 陣列

陣列 就是相同型別的資料按一定順序排列的集合,把有限個型別相同的資料元素用乙個名字表示,通過編號來區分。名字即為陣列名,編號即為下標。陣列是最簡單 使用最廣泛的一種資料結構,其實就是一塊連續的記憶體,哪怕物理上不連續,邏輯上也是連續的,連續存放著一組相同型別資料元素。陣列的定義 type 變數名 n...

資料結構 陣列

陣列 陣列是一種佔據連續記憶體並按順序儲存資料的簡單的資料結構。建立陣列時,需要首先指定陣列的容量,然後依據大小分配記憶體。由於有時候我們需要使用陣列的容量不確定,可能開闢的記憶體遠超實際使用的記憶體,所以陣列的空間效率不好。由於陣列在記憶體中是連續的儲存空間,所以它的時間效率很高,可以在o 1 的...