malloc()分配記憶體後不初始化
分配成功:
若分配成功,其返回型別是void ,表示未確定型別的指標,c,c++規定void可以強轉為任何其他型別的指標,關於void還有一種說法就是其他任何型別都可以直接賦值給它,無需進行強轉,但是反過來不可以
其返回指向被分配記憶體空間的指標,即指向一段可用記憶體的起始位址
分配失敗
記憶體不足分配失敗則返回null ,程式使用malloc時可以藉此進行判斷是否分配成功
malloc後一定要free()
typedef
int status;
#define true 1
#define false 0
#define ok 1
#define error 0
#define infaeasible -1
#define overflow -2
陣列
#define list_init_size 100
//線性表儲存空間的初始分配量
#define listincrement 10
//線性表儲存空間的分配增量
typedef
int elemtype;
typedef
struct
sqlist;
status initlist
(sqlist *l)
靜態陣列:長度固定,盡可能的長分配
init初始化,通過malloc動態分配陣列,方便realloc修改陣列空間分配大小
區別:結構不同
init優點:動態分配空間,避免空間浪費;l.length直接儲存獲取長度資訊,犧牲少量空間,換取時間;l.listsize可以記錄動態分配的記憶體空間
c 語言規定函式名會被轉換為指向這個函式的指標,除非這個函式名作為 & 操作符或 sizeof 操作符的運算元(注意:函式名用於 sizeof 的運算元是非法的)。也就是說 f = test; 中 test 被自動轉換為 &test,而 f = &test; 中已經顯示使用了 &test,所以 test 就不會再發生轉換了。因此直接引用函式名等效於在函式名上應用 & 運算子,兩種方法都會得到指向該函式的指標。
int
locateelem
(sqlist l, elemtype e,status (
*compare)
(elemtype,elemtype)
)
status equal
(elemtype a,elemtype b)
;
c語言中陣列下標從「0」開始,若l是sqlist型別線性表,表中第i個元素是l.elem[i-1]
順序儲存中,物理位置上與邏輯位置相符,因此有插入有兩種情況:
線性表末尾:i=n+1(n=l.length),可以直接插入
i != n-1 ,需要移動元素,移動恰為順序儲存最多耗時區域
腦筋急轉彎:
插入到第5個位置(順序表長度為8),其插入位置的下標為4,需將第5至8的元素後移,移動下標為4-7的元素。
一般情況下,在第i(1≤ i ≤ n)個元素之前插入乙個元素時,需要將第n至第i(共n-i+1)個元素後移
status listinsert
(sqlist *l,
int i,elemtype e)
l.listsize +
= listincrement;
//增加儲存容量
q=&(l.elem[i-1]
);//插入位置
for(p =
&(l.elem[l.length-1]
);p>=q;
--p)
//q位置元素有被移動,--p先減後使用,此處無影響
*(p+1)
=*p;
*q=e;
++l.length;
return ok;
}
該函式返回乙個指標 ,指向重新分配大小的記憶體。如果請求失敗,則返回 null。
void *realloc(void *ptr, size_t size)
長度-1;
刪除第i(1≤ i ≤ n)個元素,需將從第i+1至第n(共n-i)個元素依次前移,元素下標為第i 至 n-1
status listdelete
(sqlist *l,
int i,elemtype *e)
--l.length;
return ok;
}
資料結構(C語言版) 線性表
1 線性結構的特點 1 存在唯一乙個被稱作 第乙個 的資料元素。2 存在唯一乙個被稱作 最後乙個 的資料元素。3 除第乙個元素之外,每個資料元素均只有乙個前驅。4 除最後乙個元素之外,每個資料元素均只有乙個後繼。2 線性表 n個資料元素的有限序列,是一種邏輯結構。1 同一線性表中的元素具有相同的性質...
資料結構(C語言版) 線性表(順序表)
二 線性表的順序儲存 三 配套實驗 線性表是具有相同資料型別的n n 0 個資料元素的有限序列。1 簡單的線性表。例如,26個英文本母表 一周七天。2 複雜的線性表。例如,學生資訊登記表。在複雜的線性表,常把資料元素稱為記錄 record 它由若干個資料項 item 組成,而含有大量記錄的線性表又稱...
線性表c語言版
定義 線性表 零個或多個資料元素的有限序列。首先,他是乙個序列,元素之間是有順序的,若存在多個元素,則第乙個無前驅,最後乙個無後繼,其他元素每個元素都有且只有乙個前驅和後繼。然後,線性表強調是有限的,元素的個數是有限的。線性表元素的個數n n 0 定義為線性表的長度,當n 0時,稱為空表。在複雜的線...