1、什麼是陣列,有哪些基本操作?
1)陣列
=(資料,順序)。
陣列在程式設計中,為了處理方便,把具有相同型別的若干變數按有序的形式組織起來。這些按序排列的同類資料元素的集合稱為陣列。在c語言中,陣列屬於構造資料型別。乙個陣列可以分解為多個陣列元素,這些陣列元素可以是基本資料型別或是構造型別。因此按陣列元素的型別不同,陣列又可分為數值陣列、字元陣列、指標陣列、結構陣列等各種類別。
2)基本操作4個
(1)
initarray (&a
,n,bound1
,…,boundn)
建a
若維數n
和各維長度合法,則構造相應的陣列
a,並返回
ok(2)
destroyarray(&a)
刪a
銷毀陣列
a(3)
value(a,&e
,index1,…
,indexn)
取a a是n
維陣列,
e為元素變數,隨後是
n個下標值。若各下標不超界,將
e賦值為所指定的
a的元素值,並返回
ok(4)
assign(&a
,e,index1,…
,indexn)a←e賦值a
是n維陣列,
e為元素變數,隨後是
n個下標值。若每個下標不超界,則將
e的值賦給指定的
a的元素,並返回
ok2、什麼是稀疏矩陣,如何儲存?
如果在矩陣中,多數的元素並沒有資料,稱此矩陣為
稀疏矩陣(
sparse matrix)
。矩陣在程式中常使用二維陣列表示,二維陣列的大小與使用的儲存器空間成正比,如果多數的元素沒有資料,則會造成儲存器空間的浪費,為此,必須設計稀疏矩陣的陣列儲存方式,利用較少的儲存器空間儲存完整的矩陣資料。
3、稀疏矩陣的優點。
稀疏矩陣的優點:稀疏矩陣的計算速度更快,因為
m at l a b
只對非零元素進行操作
,這是稀疏矩陣的乙個突出的優點。假設矩陣
a,b中的矩陣一樣.計算
2*a需要一百萬次的浮點運算
,而計算
2*b只需要
2 0 0 0
次浮點運算。
對於乙個用二維陣列儲存的稀疏矩陣
amn,
如果假設儲存每個陣列元素需要
l個位元組
,那麼儲存整個矩陣需要
m*n*l
個位元組.但是,
這些儲存空間的大部分存放的是0元素
,從而造成大量的空間浪費
.為了節省儲存空間
,可以只儲存其中的非0元素
對於矩陣
amn的每個元素
aij,
知道其行號
i和列號
j就可以確定其位置
.因此對於稀疏矩陣可以用乙個結點來儲存乙個非0元素
.該結點可以定義如下:
[i,j,aij]
該結點由
3個域組成
,i:行號
,j:列號
;aij
元素值.
這樣的結點被稱為三元組結點。矩陣的每乙個元素
qij,
由乙個三元組結點
(i,j,aij)
唯一確定。
4、陣列使用中的幾個注意點。
對於陣列型別說明應注意以下幾點:
1)陣列的型別實際上是指數組元素的取值型別。對於同乙個陣列,其所有元素的資料型別都是相同的。
2)陣列名的書寫規則應符合識別符號的書寫規定。
3)陣列名不能與其它變數名相同,例如:
void main()
是錯誤的。
4)方括號中常量表示式表示陣列元素的個數,如
a[5]
表示陣列a有
5個元素。但是其下標從
0開始計算。因此
5個元素分別為
a[0],a[1],a[2],a[3],a[4]
。5)
不能在方括號中用變數來表示元素的個數,
但是可以是符號常數或常量表示式。例如:
#define fd 5
void main()
是合法的。但是下述說明方式是錯誤的。
void main()
6) 允許在同乙個型別說明中,說明多個陣列和多個變數。
5、對陣列賦值時需要注意什麼?
c語言對陣列的初始賦值還有以下幾點規定:
1)可以只給部分元素賦初值。當
中值的個數少於元素個數時,只給前面部分元素賦值。例如:
static int a[10]=;
表示只給
a[0]
~a[4]5
個元素賦值,而後
5個元素自動賦0值。
2)只能給元素逐個賦值,不能給陣列整體賦值。
例如給十個元素全部賦
1值,只能寫為:
static int a[10]=;
而不能寫為:
static int a[10]=1;
3)如不給可初始化的陣列賦初值,則全部元素均為0值。
4)如給全部元素賦值,則在陣列說明中,
可以不給出陣列元素的個數。例如:
static int a[5]=;
可寫為:
static int a=;
動態賦值可以在程式執行過程中,對陣列作動態賦值。這時可用迴圈語句配合
scanf
函式逐個對陣列元素賦值。
6、陣列的降維存放示意圖
7、陣列的定位公式
1維loc(a
i)=loc(a
1)+(i-1)×l線性表的順序儲存
2維loc(a
i,j)=loc(c1,c
2)+[(b
2-c2+1)×(i-c
1)+(j-c2)
]×l源於此式
=loc(a
0,0)+[(b
2-c2+1)×i+j
]×l簡化後公式
loc(i
,j)=loc(0
,0)+[(b
2+1)×i+j]×l
loc(i
,j)=loc(0
,0)+(b
2×i+j)×l
元素個數(b1
-c1+1)×(b
2-c2+1
) '); (window.slotbydup = window.slotbydup || ).push(); })();
'); (window.slotbydup = window.slotbydup || ).push(); })();
陣列和廣義表
一 陣列 陣列是一組型別相同的資料元素構成。有一維陣列 二維陣列 n 維陣列。一般實現時,可以過載操作符,比較方便一點。二 矩陣 1 矩陣的加減,需要兩個矩陣擁有相同的行列數才可以。對應各個位置分別進行計算 2 矩陣的相乘,需要第乙個陣的列數等於第二個的行數。如c 0,0 a 的第一列分別乘以 b的...
陣列和廣義表
陣列一旦被定義,它的維數和維界就不再改變 採用順序結構儲存結構表示陣列 二維陣列的儲存方式 以行序為主 c語言 以列序為主 loc i,j loc 0,0 b2 i j l 陣列是隨機儲存結構,由於計算各個元素儲存位置的時間相等,所以儲存陣列中任一元素的時間也相等。壓縮儲存 為多個值相同的元只分配乙...
陣列和廣義表
陣列和廣義錶可看成是一種特殊的線性表,其特殊在於 表中的元素本身也是一種線性表。記憶體連續。根據下標在o 1 時間讀 寫任何元素。二維陣列,多維陣列,廣義表 樹 圖都屬於非線性結構 陣列的順序儲存 行優先順序 列優先順序。陣列中的任一元素可以在相同的時間記憶體取,即順序儲存的陣列是乙個隨機訪問結構。...