2015-07-22 來源:www.Gzu521.net | 貴州國有企業(yè)好工作
1.數(shù)據(jù)結構
數(shù)據(jù)結構是指相互之間存在著一種或多種關系的數(shù)據(jù)元素的集合和該集合中數(shù)據(jù)元素之間的關系組成。記為:Data_Structure=(D,R),其中D是數(shù)據(jù)元素的集合,R是該集合中所有元素之間的關系的有限集合。
數(shù)據(jù)的邏輯結構:指反映數(shù)據(jù)元素之間的邏輯關系的數(shù)據(jù)結構,其中的邏輯關系是指數(shù)據(jù)元素之間的前后件關系,而與他們在計算機中的存儲位置無關。邏輯結構包括:1.集合2.線性結構3.樹形結構4.圖形結構
2.數(shù)組 (Array)
在程序設計中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。在C語言中, 數(shù)組屬于構造數(shù)據(jù)類型。一個數(shù)組可以分解為多個數(shù)組元素,這些數(shù)組元素可以是基本數(shù)據(jù)類型或是構造類型。因此按數(shù)組元素的類型不同,數(shù)組又可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結構數(shù)組等各種類別。
數(shù)組類別:
多維數(shù)組
有時需要追蹤記錄數(shù)組中的相關信息。
例如,為了追蹤記錄計算機屏幕上的每一個像素,需要引用它的 X、Y坐標。這時應該用多維數(shù)組存儲值。
可用 Visual Basic 聲明多維數(shù)組。
例如,下面的語句聲明了一個過程內(nèi)的 10 × 10 的二維數(shù)組。
Static MatrixA (9,9) As Double
可用顯式下界來聲明兩個維數(shù)或兩個維數(shù)中的任何一個:
Static MatrixA (1 To 10,1 To 10) As Double
可以將所有這些推廣到二維以上的數(shù)組。例如:
Dim MultiD (3,1 To 10,1 To 15)
這個聲明建立了三維數(shù)組,大小為 4 × 10 × 15。元素總數(shù)為三個維數(shù)的乘積,為 600。
注意
在增加數(shù)組的維數(shù)時,數(shù)組所占的存儲空間會大幅度增加,所以要慎用多維數(shù)組。使用 Variant 數(shù)組時更要格外小心,因為他們需要更大的存儲空間。
用循環(huán)操作數(shù)組:
可以用 For循環(huán)嵌套有效的處理多維數(shù)組。例如,在 MatrixA 中基于每個元素在數(shù)組中的位置為其賦值:
Dim I As Integer,J As Integer
Static MatrixA(1 To 10,1 To 10) As Double
For I = 1 To 10
For J = 1 To 10
MatrixA (I,J) = I * 10 + J
Next J
Next I
一維數(shù)組
定義
一維數(shù)組是最簡單的數(shù)組,其邏輯結構是線性表。要使用一維數(shù)組,需經(jīng)過定義、初始化和應用等過程。
數(shù)組聲明
在數(shù)組的聲明格式里,"數(shù)據(jù)類型"是聲明數(shù)組元素的數(shù)據(jù)類型,可以是java語言中任意的數(shù)據(jù)類型,包括簡單類型和結構類型。"數(shù)組名"是用來統(tǒng)一這些相同數(shù)據(jù)類型的名稱,其命名規(guī)則和變量的命名規(guī)則相同。
數(shù)組聲明之后,接下來便是要分配數(shù)組所需要的內(nèi)存,這時必須用運算符new,其中"個數(shù)"是告訴編譯器,所聲明的數(shù)組要存放多少個元素,所以new運算符是通知編譯器根據(jù)括號里的個數(shù),在內(nèi)存中分配一塊空間供該數(shù)組使用。利用new運算符為數(shù)組元素分配內(nèi)存空間的方式稱為動態(tài)分配方式。
舉例:
int[]x; //聲明名稱為x的int型數(shù)組
x=new int[10]; //x數(shù)組中包含有10個元素,并為這10個元素分配內(nèi)存空間
在聲明數(shù)組時,也可以將兩個語句合并成一行,格式如下:
數(shù)據(jù)類型[]數(shù)組名= new 數(shù)據(jù)類型[個數(shù)];
利用這種格式在聲明數(shù)組的同時,也分配一塊內(nèi)存供數(shù)組使用。如上面的例子可以寫成:
int[]x = new int [10];
等號左邊的int[]x相當于定義了一個特殊的變量x,x的數(shù)據(jù)類型是一個對int型數(shù)組對象的引用,x就是一個數(shù)組的引用變量,其引用的數(shù)組元素個數(shù)不定。等號右邊的new int[10]就是在堆內(nèi)存中創(chuàng)建一個具有10個int型變量的數(shù)組對象。int[]x = new int [10];就是將右邊的數(shù)組對象賦值給左邊的數(shù)組引用變量。
二維數(shù)組
定義
前面介紹的數(shù)組只有一個下標,稱為一維數(shù)組, 其數(shù)組元素也稱為單下標變量。在實際問題中有很多量是二維的或多維的, 因此C語言允許構造多維數(shù)組。多維數(shù)組元素有多個下標, 以標識它在數(shù)組中的位置,所以也稱為多下標變量。本小節(jié)只介紹二維數(shù)組,多維數(shù)組可由二維數(shù)組類推而得到。二維數(shù)組類型說明的一般形式是:
類型說明符數(shù)組名[常量表達式1][常量表達式2]…;
其中常量表達式1表示第一維下標的長度,常量表達式2 表示第二維下標的長度。例如:
int a[3][4]; 說明了一個三行四列的數(shù)組,數(shù)組名為a,其下標變量的類型為整型。該數(shù)組的下標變量共有3×4個,即:
a[0][0],a[0][1],a[0][2],a[0][3]
a[1][0],a[1][1],a[1][2],a[1][3]
a[2][0],a[2][1],a[2][2],a[2][3]
二維數(shù)組在概念上是二維的,即是說其下標在兩個方向上變化, 下標變量在數(shù)組中的位置也處于一個平面之中, 而不是象一維數(shù)組只是一個向量。但是,實際的硬件存儲器卻是連續(xù)編址的, 也就是說存儲器單元是按一維線性排列的。如何在一維存儲器中存放二維數(shù)組,可有兩種方式:一種是按行排列, 即放完一行之后順次放入第二行。另一種是按列排列, 即放完一列之后再順次放入第二列。在C語言中,二維數(shù)組是按行排列的。在如上中,按行順次存放,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四個元素也是依次存放。由于數(shù)組a說明為
int類型,該類型占兩個字節(jié)的內(nèi)存空間,所以每個元素均占有兩個 字節(jié)(圖中每一格為一字節(jié))。
元素的表示方法
二維數(shù)組的元素也稱為雙下標變量,其表示的形式為:數(shù)組名[下標][下標]
其中下標應為整型常量或整型表達式。例如:a[3][4] 表示a數(shù)組三行四列的元素。
下標變量和數(shù)組說明在形式中有些相似,但這兩者具有完全不同的含義。數(shù)組說明的方括號中給出的是某一維的長度,即可取下標的最大值; 而數(shù)組元素中的下標是該元素在數(shù)組中的位置標識。前者只能是常量, 后者可以是常量,變量或表達式。
一個學習小組有5個人,每個人有三門課的考試成績。求全組分科的平均成績和各科總平均成績。
課程 成績姓名Math C DBASE
張 80 75 92
王 61 65 71
李 59 63 70
趙 85 87 90
周 76 77 85
可設一個二維數(shù)組a[5][3]存放五個人三門課的成績。再設一個一維數(shù)組v[3]存放所求得各分科平均成績,設變量l為全組各科總平均成績。編程如下:
void main()
{
int i,j,s=0,l,v[3],a[5][3];
printf("input scoren");
for(i=0;i<3;i++){
for(j=0;j<5;j++)
{ scanf("%d",&a[j]);
s=s+a[j];}
v[i]=s/5;
s=0;
}
l=(v[0]+v[1]+v[2])/3;
printf("math:%dnc languag:%dndbase:%dn",v[0],v[1],v[2]);
printf("total:%dn",l);
} for(i=0;j<3;i++)
for(j=0;j<5;j++)
{ scanf("%d",&a[j]);
s=s+a[j];}
v=s/5;
s=0;
}
l=(v[0]+v[1]+v[2])/3;
程序中首先用了一個雙重循環(huán)。在內(nèi)循環(huán)中依次讀入某一門課程的各個學生的成績,并把這些成績累加起來, 退出內(nèi)循環(huán)后再把該累加成績除以5送入v之中,這就是該門課程的平均成績。外循環(huán)共循環(huán)三次,分別求出三門課各自的平均成績并存放在v數(shù)組之中。退出外循環(huán)之后,把v[0],v[1],v[2]相加除以3即得到各科總平均成績。最后按題意輸出各個成績。
初始化
二維數(shù)組初始化也是在類型說明時給各下標變量賦以初值。二維數(shù)組可按行分段賦值,也可按行連續(xù)賦值。例如對數(shù)組a[5][3]:
1.按行分段賦值可寫為static int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };
2.按行連續(xù)賦值可寫為static int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85 };
這兩種賦初值的結果是完全相同的。
void main()
{
int i,j,s=0,l,v[3];
static int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},
{85,87,90},{76,77,85} };
for(i=0;i<3;i++)
{ for(j=0;j<5;j++)
s=s+a[j];
v=s/5;
s=0;
}
l=(v[0]+v[1]+v[2])/3;
printf("math:%dnc languag:%dndbase:%dn",v[0],v[1],v[2]);
printf("total:%dn",l);
}
初始化的額外說明
對于二維數(shù)組初始化賦值還有以下說明:
1.可以只對部分元素賦初值,未賦初值的元素自動取0值。
例如:static int a[3][3]={,,}; 是對每一行的第一列元素賦值,未賦值的元素取0值。賦值后各元素的值為:1 0 02 0 03 0 0
static int a [3][3]={{0,1},{0,0,2},}; 賦值后的元素值為 0 1 00 0 23 0 0
2.如對全部元素賦初值,則第一維的長度可以不給出。
例如:static int a[3][3]={1,2,3,4,5,6,7,8,9}; 可以寫為:static int a[][3]={1,2,3,4,5,6,7,8,9};
分解
數(shù)組是一種構造類型的數(shù)據(jù)。二維數(shù)組可以看作是由一維數(shù)組的嵌套而構成的。設一維數(shù)組的每個元素都又是一個數(shù)組, 就組成了二維數(shù)組。當然,前提是各元素類型必須相同。
根據(jù)這樣的分析,一個二維數(shù)組也可以分解為多個一維數(shù)組。C語言允許這種分解有二維數(shù)組a[3][4],可分解為三個一維數(shù)組,其數(shù)組名分別為a[0],a[1],a[2]。對這三個一維數(shù)組不需另作說明即可使用。這三個一維數(shù)組都有4個元素,例如:一維數(shù)組a[0]的元素為a[0][0],a[0][1],a[0][2],a[0][3]。最后必須強調(diào)的是,a[0],a[1],a[2]不能當作下標變量使用,它們是數(shù)組名,不是一個單純的下標變量。
字符數(shù)組
用來存放字符量的數(shù)組稱為字符數(shù)組。
字符數(shù)組類型說明的形式與前面介紹的數(shù)值數(shù)組相同。例如:char c[10]; 由于字符型和整型通用,也可以定義為int c[10]但這時每個數(shù)組元素占2個字節(jié)的內(nèi)存單元。
字符數(shù)組也可以是二維或多維數(shù)組,例如:char c[5][10];即為二維字符數(shù)組。
字符數(shù)組也允許在類型說明時作初始化賦值。例如:static char c[10]={`c`,` `,`p`,`r`,o`,g`,r`,`a`,`m`};賦值后各元素的值為:數(shù)組C c[0]c[1]c[2]c[3]c[4]c [5]c[6]c[7]c[8]c[9]其中c[9]未賦值,由系統(tǒng)自動賦予0值。
當對全體元素賦初值時也可以省去長度說明。例如:static char c[]={`c`,` `,`p`,`r`,`o`,`g`,`r`,`a`,`m`};這時C數(shù)組的長度自動定為9。
main()
{
int i,j;
char a[][5]={{'B','A','S','I','C',},{'d','B','A','S','E'}};
for(i=0;i<=1;i++)
{
for(j=0;j<=4;j++)
printf("%c",a[j]);
printf("n");
}
}
本例的二維字符數(shù)組由于在初始化時全部元素都賦以初值, 因此一維下標的長度可以不加以說明。字符串在C語言中沒有專門的字符串變量, 通常用一個字符數(shù)組來存放一個字符串。在2.1.4節(jié)介紹字符串常量時,已說明字符串總是以'