順序存儲結構的評價:
優點:
① 是一種 隨機存取 結構,存取任何元素的時間是一個常數,速度快;
② 結構簡單,邏輯上相鄰的元素在物理上也是相鄰的;
③ 不需要使用指針,節省存儲空間。
缺點:
① 插入和刪除元素要移動大量元素,消耗大量時間;
② 需要一塊連續的存儲空間;
③ 插入元素可能發生“溢出”;
④ 自由區中的存儲空間不能被其他數據占用(共享),存在浪費空間的問題。
內存:網格中,2k,5k,3k 指的是自由區中未被使用的存儲空間。
2k | 占用 | 5k | 占用 | 3k |
單鏈表:單鏈表指的是線性表的每個節點分散地存儲在內存空間中,先后依次用一個指針串聯起來。
data:數據域,用於存放元素
next:指針域,用於存放下一個結點地址的部分
單鏈表分為:不帶表頭結點 和 帶表頭結點。
不帶表頭結點的單鏈表:單鏈表的頭指針指向第一個首元結點。
head == NULL 時,為空表,否則為非空表。.
當它是非空表時,在首節點 *head 中會存放數據。
帶頭結點的只須 head 就可以訪問第一個元素。
帶表頭結點 的單鏈表:
有表頭結點 單鏈表的頭指針指向頭結點。
head 指向表頭節點,
head -> data 不放元素
head -> next 指向首節點 a1
當 head -> next == NULL,為空表,否則為非空表。
以上幾句話結合截圖來看會更清晰明了。
單鏈表的結點結構:
① struct:這是結構體關鍵字,通過存放一組不同類型的數據,來定義一個結構。其定義形式為:
struct 結構體名稱 {
結構體所包含的變量或數組
};
結構體是一種集合,里邊包含了多個變量或數組,它們類型可以相同,也可以不同,每個這樣的變量或數組
都稱為結構體的成員(Member)。例如我們定義一個 student 結構體:
注意!!!!大括號后邊的分號 ";" 不能少,這是一條完整的語句。
struct stu{
char *name;// 姓名
int num; // 學號
int age; // 年齡
};
思考題:單鏈表中的結點有兩個域嗎?
存儲每個結點需要有兩個域,一個是數據域,另一個是指針域