3.2
順序儲存:頻繁訪問
1.隨機訪問:o(1)
2.插入i->o(n) n-i+1 平均 n/2;
刪除 n-i 平均 (n-1)/2
鏈式儲存:所有元素可以存放在位址不連續的地方
a1| &a2 ->a2|&a3->a3| &a4……an| null 鍊錶結束條件
&a1放在**?
設定乙個頭指標存a1的位址。
一般以頭指標名字命名單鏈表
why?called單鏈表
每乙個節點有乙個指標域
怎麼得到第i個結點的位址?
鏈式訪問訪問麻煩,只能逐個訪問,
特點:儲存單元可連續可不連續
順序訪問:只能從頭指標開始乙個乙個訪問,<-和順序儲存不同
首元結點:存a1值的節點
頭節點:指標域存放a1位址,存放特徵元素或者屬性
若有頭節點,頭指標,指標域裡存頭節點位址。
頭指標:指向鍊錶中的第乙個節點的指標
頭指標->(頭節點)->首元結點
頭節點好處?
沒頭結點要按空表和非空表分類
如何表示l是不是空表?
若無頭結點,看頭指標的值是否為空。lnull
有頭節點,看頭結點的指標域是否為空l->nextnull
typedef struct lnodelnode,*linklist// linklist為lnode型別的指標,即linklist==lnode *,但大小有區別
3.51.頭插法建立單鏈表:
linklist creat_list(linklist head)
end->next = null;
}頭插法相對簡便,但插入的資料與插入的順序相反;
尾插法操作相對複雜,但插入的資料與插入順序相同。
頭插法:頭結點之後,首元節點之前
linklist l;
l=(lnode*)malloc(sizeof(lnode));
l->next=null;
尾插法:增加乙個尾指標
l=(lnode*)malloc(sizeof(lnode));
l->next=null;
r=l;
求表長,安值查詢,按序號查詢
3.9單鏈表的刪除:如果只知道頭指標,要刪除第i個位置,時間複雜度o(n);
如果只說刪除時間複雜度為o(1);
例1:單鏈表的倒置
遍歷鍊錶,頭插法
void reversesq(linklist &h)
}例2:單鏈表的合併
3.12
雙向鍊錶的插入:
第一步:首先找到插入位置,節點 s 將插入到節點 p 之前
第二步:將節點 s 的前驅指向節點 p 的前驅,即 s->prior = p->prior;
第三步:將節點 p 的前驅的後繼指向節點 s 即 p->prior->next = s;
第四步:將節點 s 的後繼指向節點 p 即 s->next = p;
第五步:將節點 p 的前驅指向節點 s 即 p->prior = s;
1.迴圈鍊錶:最後乙個結點的指標域指向頭節點。
一般設定尾指標
這時:頭節點為:r->next;
首元節點:r->next->next;
和單鏈表的區別:
a.可以從任何乙個結點出發找到其他的結點
b.判斷鍊錶結束的條件不一樣:p->next=null(單鏈表)
if(p->next=l)判斷是否到末尾
cl->next=null;(單鏈表)
當l->next =l;是空表
2.雙向鍊錶:
可以快速找到前驅和後繼
空表:l->next=l-prior=l;
順序表插入時移動n-i+1個,刪除時移動n-i個
線性表的順序儲存結構是:隨機儲存結構
單鏈表是順序訪問
資料結構筆記 單鏈表
順序表 一.順序儲存結構 與對陣列的操作類似,並無太大新知識點,顧略去。二.鏈式儲存結構 單鏈表的儲存不連續,每個儲存單元既儲存資料元素,又儲存後繼元素的位址。因此,節點結構定義 templatestruct node 為了實現基本操作,建立模板 templateclass llist 單鏈表初始化...
資料結構單鏈表選擇填空整理
單鏈表的每個結點中包括乙個指標next,它指向該結點的後繼結點。現要將指標q指向的新結點插入到指標p指向的單鏈表結點之後,下面的操作序列中 c 是正確的。2分 a.q p next p next q next b.p next q next q p next c.q next p next p ne...
資料結構單鏈表之合併兩個有序鍊錶筆記。
將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。輸入 l1 1,2,4 l2 1,3,4 輸出 1,1,2,3,4,4 示例 2 輸入 l1 l2 輸出 示例 3 輸入 l1 l2 0 輸出 0 l1指向的結點值小於或者等於l2指向的結點值 則pr...