第5章 陣列

2021-08-08 03:13:42 字數 3916 閱讀 6825

陣列是一種常用的資料結構。高階程式設計評議都提供了支援陣列的基本方法。陣列分靜態陣列和動態陣列。靜態陣列和動態陣列的實現機制相似,只是在程式設計時向系統申請內在空間的時間不同。

陣列是n(n>1)個相同資料型別的資料元素a0,a1,a2,…,a(n-1)構成的占用一塊位址連續的記憶體單元有限序列。

資料集合:

資料的資料集合可以表示為a0,a1,a2,…,a(n-1),每個資料元素的資料型別為抽象資料元素型別datatype。

操作集合:

(1).求陣列元素個數arraylength(d):函式返回陣列d的元素個數。

(2).存陣列元素storage(d,i,x):把資料元素x存入下標為i的陣列d中,其約束條件為0<=i<=arraylength(d) – 1.

(3).取陣列元素get(d,i,x):取出下標為i的陣列d中的元素賦給引數x,其約束條件為0<=i<=arraylength(d)-1

陣列有靜態陣列和動態陣列兩種,靜態陣列在定義時就必須給出陣列個數,因為編譯系統要在軟體編譯時就為靜態陣列分配記憶體空間。動態陣列是在需要儲存單元空間時才給出陣列的具體個數。高階程式語言一般都提供支援使用者定義動態陣列的函式或運算子。

c語言提供建立和撤消動態陣列的函式malloc()函式,calloc()函式,free()函式

例1:

#include 

例2:

定義有3行,4列整數型別的二維陣列a,先逐行分別給陣列元素賦資料1,2,…,12,然後顯示陣列中的數值。要求分別把申請二維動態陣列的過程和釋放二維動態陣列的過程編寫成函式。

#include 

#include

#include

//函式返回動態申請的row行,col列的二維動態陣列,記憶體不足時退出

int ** make2darray(int row,int col)

for(i = 0;i < row; i++)

}return a;

}//釋放二維 動態陣列a的儲存空間,row為陣列行數

用順序表儲存的三元組線性表稱作三元組順序表。三元組順序表是把三元組定義成順序表的資料元素。因此,可把三元組定義成順序表的資料元素:

typedef

struct seqlist;

//順序表操作實現

//1.初始化

void listinitiate(seqlist*l)

//2.求當前資料元素個數

int listlength(seqlist l)

//3.插入資料元素

int listinsert(seqlist*l,int i,datatype x)

else

if(i < 0 || i > l->size)

else

l->list[i] = x; /*插入元素x*/

l->size++; /*元素個數加1*/

return

1; }

}//4.刪除資料元素

int listdelete(seqlist*l,int i,datatype*x)

else

if(i < 0 || i > l->size - 1)

else

l->size--; /*資料元素個數減1*/

return

1; }

}//5.取資料元素

int listget(seqlist l,int i,datatype* x)

else

}#include

#define maxsize 1000

typedef

int elemtype;

typedef

struct

datatype;

typedef

struct

tritype;

#include "seqlist.h"

/*a為轉置前的三元組順序表,da是a的控制資料

三元組順序表a按先行序後列序的順序存放

*/void transition1(seqlist a,tritype da,seqlist *b,tritype*db)

}}/*

a為轉置前的三元組順序表,da是a的控制資料

三元組順序表a按先行序後列序的順序存放

b為轉置後的三元組順序表,db是b的控制資料

*/void transition2(seqlist a,tritype da,seqlist*b,tritype*db)}}

}}

例3:

將圖a轉置為圖b

listinitiate(&lista); //順序表初始化

for(i = 0;i < mya.td; i++)

listinsert(&lista,i,a[i]); //向順序表第i個位置插入元素

printf("轉置前-行數:%d\t列數:%d\t非零元數:%d\n",mya.md,mya.nd,mya.td);

printf("三元組元素依次為:\n");

for(i = 0;i < mya.td; i++)

printf("%d\t%d\t%d\n",lista.list[i].i,lista.list[i].j,lista.list[i].d);

printf("\n\n");

transition(lista,mya,&listb,&myb); //轉置

printf("轉置後-行數:%d\t列數:%d\t非零元數:%d\n",myb.md,myb.nd,myb.td);

printf("三元組元素依次為:\n");

第5章 陣列

一 認識陣列 傳統上把陣列 array 定義為一組有某種共同特性的元素,包括相似性和型別。每個元素由乙個特殊的識別符號來區分,稱之為鍵 key 而每個鍵對應乙個值 value usernames array 李彥巨集 馬雲 馬化騰 定義乙個陣列 預設情況下以數字作為索引的鍵名 從0開始 userna...

第5章 陣列

1 陣列 指的是把一組相同資料型別,並且有相同含義資料放到乙個陣列變數中。1 定義 陣列是乙個變數,儲存相同資料型別的一組資料。2 宣告 宣告乙個陣列就是在記憶體空間劃出一串連續的空間 3 陣列的結構和基本要素 識別符號 陣列的名稱,用於區分不同的陣列。陣列只有乙個名稱 陣列元素 向陣列中存放的資料...

5 第 5 章 迴圈

1.可以用迴圈來驗證輸入。在迴圈前的第一次讀取操作,稱為啟動讀取,如果後續還需要繼續讀取,則語句應該在迴圈中。2.在實際程式設計應用中,不建議在 cout 語句中放置遞增或遞減運算子 因為容易出錯 3.需要計數時使用計數器,需要累計彙總時使用累加器。4.標記符號是乙個特殊值,指示著值列表的結尾。一般...