陣列和廣義表的相關重要概念!!

2021-09-16 19:28:27 字數 3945 閱讀 5404

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 時間讀 寫任何元素。二維陣列,多維陣列,廣義表 樹 圖都屬於非線性結構 陣列的順序儲存 行優先順序 列優先順序。陣列中的任一元素可以在相同的時間記憶體取,即順序儲存的陣列是乙個隨機訪問結構。...