老楊《大話資料結構》第三章 線性表
基本概念
線性表是零個或者多個資料元素的有序序列,第一個元素沒有前驅,最後一個元素沒有後繼,其他資料元素有且僅有一個前驅一個後繼,同時線性表元素的個數n定義為線性表長度。
線性表的抽象資料型別ADT
=>Data
{a1, a2, ..., an}, 且每個元素的型別均為DataType,從第二個資料元素到倒數第二個資料元素都有且僅有一個前驅元素,和一個後繼元素。
=>Operation
InitList(*L)
ListEmpty(L)
ClearList(*L)
GetElem(L, i, *e)
LocateElem(L, e)
ListInsert(*L, i, e)
ListDelete(*L, i, *e)
ListLength(L)
endADT
void union(List *La, List Lb)
{
ing La_len, Lb_len, i ;
ElemType e;
La_len = ListLength(La);
Lb_len = ListLength(Lb);
for (i=1; i<=Lb_len; i++) {
GetElem(Lb, i, e);
if (!LocateElem(La, e, equal))
ListInsert(La, ++La_len, e); }
}
線性表的順序儲存結構
線性表的順序儲存結構,指的是用一段連續的實體地址儲存單元一次儲存線性表的資料元素,(a1, a2, ..., ai-1, ai, ..., an)
線性表的順序儲存結構就是通過佔位的形式,把一定記憶體空間佔據,然後讓不同的資料元素一次放在空地中。線性表順序儲存的結構程式碼中需要三個屬性
- 儲存空間的起始位置
- 最大儲存容量
- 線性表當前的長度
順序儲存結構的插入與刪除
線性表的插入本質上是將元素i插入到表的某處,並將後續資料元素依次向後挪一位。插入演算法的思路是,
- 插入位置不合理,丟擲異常
- 線性表長度大於或者等於陣列長度,丟擲異常或者動態增加容量
- 最後一個元素開始向前遍歷到i位置,分別後移
- 元素插入位置i
- 表長加1
刪除操作則反向,將元素刪除後,後續資料元素向前挪位。刪除演算法思路:
- 如果刪除位置不合理,丟擲異常
- 去除刪除元素
- 刪除元素位置遍歷到最後,前移
- 表長-1
優缺點:
優點:無需因為邏輯關係增加儲存空間,且可以快速存取表中元素
缺點:插入和刪除操作需要移動大量元素,難以確定儲存空間容量且會造成儲存空間碎片
線性表的鏈式儲存結構
鏈式儲存結構的設計打破了物理儲存地址必須連續的規定,這也是他和線性表區別最大的地方。一個資料元素包含了兩個部分,即資料域和指標域。資料域負責儲存所使用的具體資料,指標域則負責指向後繼節點地址。由於節點之間使用鏈子式結構進行連結,因而稱為線性表的鏈式儲存結構,這兩部分的組合稱為一個節點Node。
同理,對於線性表來說,都是有頭有尾的人物。因此連結串列也不例外,第一個節點儲存位置稱為頭指標,最後一個節點的後繼指標指向Null,就是空。第一個節點稱為頭節點。頭指標式指向第一個節點的指標,頭指標具有標識作用,且無論連結串列是否為空,頭指標均不是空。頭指標式連結串列的必要元素。
單連結串列的插入與刪除
連結串列插入非常簡單,將新節點和相鄰節點的指標域重新連結即可。注意順序不能反 不然會出現迴圈指標造成錯誤。
s->next = p->next;
p->next = s;
那麼,單連結串列的第i個資料插入的思路是:
- 宣告節點p指向連結串列第一個節點,初始化j從1開始
- j<i, 繼續遍歷連結串列讓p指標後移,j累加1
- 若p為空連結串列,則第i元素不存在
- 否則查詢成功,生成空節點s
- 將e賦值給s->data
- 單連結串列插入標準語句
- 返回OK
單連結串列的刪除
q=p->next; p->next = p->next->next
本質上就是將q節點隔開了,同時重新接上了p節點和下下個節點q->next 或者p->next->next。
單連結串列的整表建立與刪除
單連結串列的整表建立是:
- 宣告節點p和i計數器變數i
- 初始化空連結串列i
- L的頭結點指標指向NULL
- 迴圈
- 生成新結點給p
- 隨機生成數字給p資料域
- p插入到頭結點與新節點之間
單連結串列的整表刪除:
宣告節點P和Q
第一個節點的值賦值給P
迴圈
- 將下一節點賦值給Q
- 釋放P
- Q賦值給P
相關文章
- [資料結構] - 線性表資料結構
- 資料結構 | 線性表資料結構
- 資料結構——線性表資料結構
- 資料結構-線性表資料結構
- 資料結構—線性表資料結構
- 資料結構 - 線性表 - 順序表資料結構
- 【資料結構之線性表總結】資料結構
- 資料結構-線性表、連結串列資料結構
- 線性表__資料結構筆記資料結構筆記
- 資料結構:線性表-例題資料結構
- 考研資料結構-線性表-順序表資料結構
- 【資料結構】線性表-單連結串列資料結構
- 大話資料結構資料結構
- 資料結構筆記——線性表(中)資料結構筆記
- 資料結構筆記——線性表(下)資料結構筆記
- 線性結構-線性表
- 《大話資料結構》總結資料結構
- 資料結構與演算法 - 線性表資料結構演算法
- 資料結構——線性表P35.1資料結構
- 考研資料結構複習之線性表資料結構
- 資料結構線性表兩種方式分享資料結構
- 大話 Redis 資料結構Redis資料結構
- 資料結構與演算法(一):線性表資料結構演算法
- 資料結構基礎學習之線性表資料結構
- 資料結構-第一篇:線性表資料結構
- 【資料結構&演算法】04-線性表資料結構演算法
- 演算法與資料結構(1)--線性表演算法資料結構
- 資料結構與演算法 | 線性表 —— 順序表資料結構演算法
- 筆記:大話資料結構筆記資料結構
- 資料結構與演算法 | 線性表 —— 連結串列資料結構演算法
- 資料結構:特殊的線性表之 棧 & 佇列資料結構佇列
- 資料結構:線性表(Python實現基本操作)資料結構Python
- 資料結構:線性表的順序實現2.2資料結構
- 資料結構實驗三:線性表綜合實驗資料結構
- 資料結構中的線性表程式碼實現資料結構
- 實戰資料結構(7)_線性表的綜合操作資料結構
- 前端資料結構--線性結構-連結串列前端資料結構
- 資料結構與演算法-線性表-單連結串列資料結構演算法