《資料結構》(C語言版)ch2 線性表學習筆記

2021-10-10 01:27:20 字數 2346 閱讀 2132

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時,稱為空表。在複雜的線...