王卓數據結構---類C語言有關操作補充1
補充:元素類型說明
順序表類型定義
typedef struct{
????ElemType data[];? //用來存放順序表中的數據元素的數組
????int length; //整型變量用來存放順序表當中元素的個數
}SqList;//順序表類型
注:ElemType是用來存放元素的類型,例如:存放A B C D,可以用char。
如果不想這樣修改,也可以提前定義一下。
typedef char ElemType;
typedef int ElemType;
如果數據元素是個復雜類型,存儲多項式不僅存放系數還要存放指數,可以定義一個結構類型。
typedef struct{
????float p;
????int e;
}Polynomial
typedef struct{
????Polynomial*elem;
????int length;
}Sqlist;
補充:數組的定義

這個數組有多大呢?
我們可以用內存動態(tài)分配的函數來給他分配內存。
Sqlist L;//用順序表類型定義了一個變量L,
????????????L有兩個成員:L.data用來存放順序表中的元素? ??
????????????????????????????????????L.length用來存放當前數據表中元素的個數
L.data=(ElemType*)malloc(sizeof(ElemType)*MaxSize);
補充:C語言的內存動態(tài)分配
依舊是上面的例子
紫色部分則是分配內存的,malloc(m)它的參數要求是一個整數,也就是分配這一塊空間的字節(jié)數。
sizeof(ElemType)*MaxSize分配了多少字節(jié)數呢?MaxSize可能是100,1000.這取決于你的需要。假如一個元素需要占8個字節(jié),Max Size是100,直接8*100=800。
注:這里面的*不是指針,是乘法。
這樣計算很麻煩,所以使用了sizeof(x),它的參數可以是變量也可以是類型。計算這個變量和類型所需要的字節(jié)數。如果元素類型是char就可以計算出一個字符1個字節(jié),如果是int就可以計算出一個字符4個字節(jié)。例如上面的復雜類型,float? ?4個字節(jié),int? ?4個字節(jié)。這樣一個元素需要8字節(jié)。可不再需要自己計算。8*100=800這個函數的結果就是從內存中找到800個字節(jié)空間。
800個字節(jié)怎么劃分呢?
通過前面的類型來劃分
L.data=(ElemType*)malloc(sizeof(ElemType)*MaxSize);
如果類型是char? 800個空間分為800塊
如果類型是int? ?800個空間分為200塊
劃分成什么類型看存儲的元素是什么類型:(ElemType*)。
注:(ElemType*)? ?*的意思的分配好的結果是個指針,放到數組當中,因為數組中放的是地址。
? ? ? ?(ElemType*)。()的意思是強制轉換
L.data=(ElemType*)malloc(sizeof(ElemType)*MaxSize);
獲得了數組中大片空間的基地址呀就是第一個數據元素的地址,知道了第一個就可以計算后面的了。可以用指針操作也可以用數組的下標來操作。

補充:C++的動態(tài)存儲分配


int*p1 = new int;
new int表示從內存中動態(tài)的分配一塊空間,這塊空間多大呢?放的是int型。這塊空間得到的是地址,所以必須賦值給一個指針變量。
int*p1=new int(10);
也可以直接賦一個初值,表示new了一塊空間這塊空間存儲了10。把新的空間賦值給p1。
不用的空間可以釋放掉,C語言用的是free,而C++用的是delete:

補充:C++中的參數傳遞

傳值方式是傳遞變量的值。
傳遞以后只把值賦值到形參當中,形參發(fā)生改變,實參的值是不改變的。
傳地址是傳遞地址。
實參形參共用同一片空間。改變實參的值形參也會改變。
注:C++中比C中多一種方式,C中可以傳遞數組名和指針變量。數組名中存放的是基地址。C++中多了一種引用的類型,也是傳遞的地址。