定義
相同資料型別(每個資料一樣大)的n個元素的有限序列(有次序)
每個元素有前驅(除第乙個)/後繼(除最後乙個)
基本操作
(創銷增刪改查)
一位陣列可以靜態分配(大小和空間實現固定),也可動態分配(佔滿後開闢一塊)
順序表特點
基本操作
插入將順序表第i個元素及其後元素後移一位(別忘了更改length)
最好情況:表位插入o(1);最壞情況:o(n);平均情況:o(n)
按值查詢(順序查詢)
最好情況:恰在表頭o(1);最壞情況:o(n);平均情況:o(n)
結點分為:指標域 資料域
頭指標標識乙個單鏈表,頭指標為null時表示乙個空表。為操作方便,在第乙個結點之前附加乙個頭結點
頭結點頭指標始終指向第乙個結點(此時為頭結點),頭結點一般不儲存資訊優點
按序號查詢表結點
從第乙個節點順著next域往下找,直到第i個,否則返回最後乙個結點指標域null
while
(p && j(p!=
null
&& p-
>data!=e)
# 若沒找到,且沒到最後,繼續找。到最後p=
null,即尾結點後面的空結點
插入結點(後插)
找到前驅(i-1)為*p,令新結點*s指標域指向*p後繼結點,再令*p指標域指向*s
p =
getelem
(l, i-1)
;// 查詢插入位置的前驅
s->next = p-
>next;
p->next = s;
最後兩步顛倒的話:丟失了原有的p->next,即後繼結點的位置
前插指在乙個結點前面插入。
一種方式是找到i-1轉化為後插
一種是將*s插入到*p後面,然後將s與p的data交換(李代桃僵)
頭插法建立單鏈表
從空表開始生成新結點,然後將新結點插入當前煉表表頭,即頭結點之後
l-
>next =
null;.
..s->next = l-
>next;
// s新插入相當於佔住l(頭結點)的位置
l->next = s;
// l由佔到s前面,重複成為頭結點
尾插法建立單鏈表
增加乙個尾指標r,始終指向尾結點
刪除結點
設*p是被刪的前驅,修改*p的指標域指向*q的下乙個結點,主要耗費在查詢,o(n)
擴充套件:刪除結點*p
將後繼結點的值賦給自身,然後刪除後繼結點(李代桃僵)
結點型別
資料域,指標域:前驅prior 後繼next
可以很方便的找到前驅結點
插入在p所指結點後面插入*s
s-
>next = p-
>next;
// s的後繼指向p的後面
p->next-
>prior = s;
// 後繼結點的前驅為s
s->prior = p;
// s的前驅
p->next = s;
// p的後繼結點設定
可以畫示意圖
刪除迴圈單鏈表
表尾結點*r的next指向l
判斷是否為空:l->next = l,頭結點的指標為頭指標
單鏈表只能從表頭開始遍歷,而迴圈單鏈表可以從任意位置,對於表頭和表尾的操作只需要o(1)
迴圈雙鏈表
為空時,頭結點的prior next 都指向l
借助陣列描述線性表,結點也有資料域和指標域,指標是結點相對位址,又稱游標
靜態鍊錶需要預先分配一塊連續記憶體空間
以next==-1結束,插入刪除與動態鍊錶相同,只需要修改指標,不移動元素(看圖)
1 訪問方式
順序表可以順序訪問,也可隨機訪問(下標)(訪問只需1次);鍊錶只能從表頭順序訪問(訪問需i次)
2 邏輯結構物理結構
都是線性結構,順序訪問時,邏輯上相鄰的元素,物理上也相鄰
3 查詢、插入、刪除
按值查詢,順序表無序時,都為o(n);有順序時,為o(log2n)(折半查詢)
按序號,順序表隨機訪問o(1),鍊錶o(n);
插入刪除,順序表需要移動大量元素
4 空間分配
順序:需要預先分配足夠大空間
鏈式:靈活高效,但儲存密度低(有指標)
面試 王道408資料結構知識點總結
資料結構是相同性質的資料元素的集合 資料結構三要素是邏輯結構 儲存結構 資料的運算 邏輯結構包括集合 線性結構 樹形結構 圖狀結構 集合 元素間無特殊的聯絡 線性結構 元素間只有一對一的聯絡 樹狀結構 元素間有一對多的聯絡 圖狀結構 元素間存在多對多的聯絡 線性結構包括棧 佇列 串 陣列 線性表 樹...
王道考研 資料結構 筆記
上面這張圖來自課件,發現這張圖將計算機四大基礎學科之間的關係很好的體現出來了,故貼在這。資料元素 資料項 資料元素是資料的基本單位。資料元素由資料項組成。如,在飯館排隊的顧客,可用以下資料元素和資料項表示 資料結構 資料物件 資料結構是相互之間存在一種或多種特定關係的資料元素的集合。資料物件是具有相...
考研資料結構必須掌握的知識點
時間複雜度判斷理論 o 1 o log2 n o n o n log2 n o n 2 o n k o 2 n 空間複雜度判斷理論 屬性大小 char unsigned char signed char 1個位元組 short int unsigned short int signed int 2個...