目錄
一.線性表的定義
二.線性表的順序存儲結構
1.順序存儲的定義:
2.順序存儲方式:
3.數組長度與線性表長度的區別
4.地址計算方法
三.順序存儲結構的插入與刪除
1.獲得元素操作
2.插入操作
3.數組長度與線性表長度的區別
4.線性表順序存儲的優缺點
四.線性表的鏈式存儲結構
1.線性錶鏈式存儲結構定義:
2.頭指針與頭節點的異同
五.單鏈表的讀取
六.單鏈表的插入與刪除
1.單鏈表的插入:
2.單鏈表的刪除:
七.單鏈表的整表創建
1.創建單鏈表的過程就是一個動態生成鏈表的過程
2.單鏈表整表創建的算法思路:
八.單鏈表的整表刪除
1.單鏈表整表刪除的算法思路如下:
九.單鏈表結構與順序存儲結構優缺點
十.靜態鏈表
2.靜態鏈表的優缺點
十一.循環鏈表
十二.雙向鏈表
一.線性表的定義
1.線性表是零個或多個具有相同類型的數據元素的有限序列
2.線性表的關鍵:
(1)首先線性表是一個序列,元素之間是有順序的
(2)然後,線性表強調是有限的
二.線性表的順序存儲結構
1.順序存儲的定義:
線性表的順序存儲結構,指的是用一段地址連續的存儲單元依次存儲線性表的數據元素
2.順序存儲方式:
(1)描述順序存儲結構需要三個屬性:
- 存儲空間的起始位置:數組data,它的存儲位置就是存儲空間的存儲位置
- 線性表的最大存儲容量:數組長度MaxSize
- 線性表的當前長度:length
3.數組長度與線性表長度的區別
(1)數組的長度是存放線性表的存儲空間的長度,存儲分配後這個量一般是不變的
(2)線性表的長度是線性表中數據元素的個數,隨着線性表插入和刪除操作的進行,這個量是變化的
(3)線性表的長度應該小於等於數組的長度
4.地址計算方法
三.順序存儲結構的插入與刪除
1.獲得元素操作
2.插入操作
(1)插入算法的思路:
- 如果插入位置不合理,拋出異常;
- 如果線性表長度大於等於數組長度,則拋出異常或動態增加容量;
- 從最後一個元素開始向前遍歷到第i個位置,分別將它們都向後移動一個位置;
- 將要插入元素填入位置i處,表長加1
3.刪除操作
(1)刪除算法的思路:
- 如果刪除位置不合理,拋出異常;
- 取出刪除元素;
- 從刪除元素位置開始遍歷到最後一個元素位置,分別將它們都向前移動一個位置;
- 表長減1
4.線性表順序存儲的優缺點
(1)線性表的順序存儲結構,在存、讀數據時,不管是哪個位置,時間複雜度都是O(1);而插入或刪除時,時間複雜度都是O(n)
四.線性表的鏈式存儲結構
1.線性錶鏈式存儲結構定義:
(1)線性表的鏈式存儲結構的特點:
是用一組任意的存儲單元存儲線性表的數據元素,這組存儲單元可以是連續的,也可以是不連續的。這就意味着,這些數據元素可以存在內存未被佔用的任意位置
(2)鏈表的每個結點中只包含一個指針域,所以叫做單鏈表
(3)鏈表中第一個結點的存儲位置叫做頭指針
(4)線性鏈表的最後一個結點指針爲“空”
2.頭指針與頭節點的異同
五.單鏈表的讀取
(1).獲得鏈表第i個數據的算法思路:
- 聲明一個指針p指向鏈表第一個結點,初始化j從1開始;
- 當j<i時,就遍歷鏈表,讓p的指針向後移動,不斷指向下一結點,j累加1;
- 若到鏈表末尾p爲空,則說明第i個結點不存在;
- 否則查找成功,返回結點p的數據
六.單鏈表的插入與刪除
1.單鏈表的插入:
(1)單鏈表第i個數據插入結點的算法思路:
- 聲明一指針p指向鏈表頭結點,初始化j從1開始;
- 當j<i時,就遍歷鏈表,讓p的指針向後移動,不斷指向下一結點,j累加1;
- 若到鏈表末尾p爲空,則說明第i個結點不存在;
- 否則查找成功,在系統中生成一個空結點s;
- 將數據元素e賦值給s->data;
- 單鏈表的插入標準語句s->next=p->next;p->next=s;
- 返回成功
2.單鏈表的刪除:
(1)單鏈表第i個數據刪除結點的算法思路:
- 聲明一指針p指向鏈表頭結點,初始化j從1開始;
- 當j<i時,就遍歷鏈表,讓p的指針向後移動,不斷指向下一個結點,j累加1;
- 若到鏈表末尾p爲空,則說明第i個結點不存在;
- 否則查找成功,將欲刪除的結點p->next賦值給q;
- 單鏈表的刪除標準語句p->next=q->next;
- 將q結點中的數據賦值給e,作爲返回;
- 釋放q結點;
- 返回成功
七.單鏈表的整表創建
1.創建單鏈表的過程就是一個動態生成鏈表的過程
2.單鏈表整表創建的算法思路:
(1).聲明一指針p和計數器變量i;
(2).初始化一空鏈表L;
(3).讓L的頭結點的指針指向NULL,即建立一個帶頭結點的單鏈表;
(4).循環:
- 生成一新結點賦值給p;
- 隨機生成一數字賦值給p的數據域p->data;
- 將p插入到頭結點與前一新結點之間
八.單鏈表的整表刪除
1.單鏈表整表刪除的算法思路如下:
(1).聲明一指針p和q;
(2).將第一個結點賦值給p;
(3).循環:
- 將下一結點賦值給q;
- 釋放p;
- 將q賦值給p