線性表之靜態(tài)鏈接,循環(huán)鏈表,雙向鏈表

單鏈接的整表創(chuàng)建

 經(jīng)常寫swift寫的沒有寫分號的習(xí)慣了~如果有看到的人見諒哈
  • 頭插法
    *L = (LinkList)malloc(sizeof(Node)) (*L)->next = NULL for(int i = 0;i<n;i++){ p = (LinkList)malloc(sizeof(Node)) p->next = rand()%100 +1 p ->next = (*L)->next; (*L)->next = p }
  • 尾插法(外部一個指針記錄當(dāng)前最后一個元素的位置。不斷更新最后一個元素)
    r = *L for(int i =0 ;i<n;i++){ p = (Node*)malloc(sizeof(Node)) p->data = 1 p ->next = r r = p } r->next = NULL

單鏈表的整表刪除

  • 聲明 p,q,
  • 將第一個節(jié)點賦值給p
  • 循環(huán) q記錄p—>next,釋放p,p =q
    最后使頭節(jié)點的指針域為NULL

靜態(tài)鏈表

在刪除和刪除操作的時候只需要修改游標,不需要移動元素,從而改進了順序存儲結(jié)構(gòu)中插入和刪除需要移動大量元素的缺點

缺點:

  • 沒有解決連續(xù)分配帶來的表長難以確定的問題
  • 失去了順序存儲結(jié)構(gòu) 隨機存取的特性

靜態(tài)鏈表是為了 沒有指針的高級語言設(shè)計的一種實現(xiàn)單鏈接能力的方法

循環(huán)鏈表

單鏈表中終端結(jié)點的指針端由空指針改為指向頭結(jié)點,就使整個單鏈表形成了一個環(huán)。這種頭尾相連的結(jié)構(gòu)稱為循環(huán)鏈表。

兩個循環(huán)鏈表 合并成一個循環(huán)鏈表

//記錄rearA的next的指向
p = rearA->next;

//rearA的末尾指向rearB的第一個結(jié)點。不是頭結(jié)點

rearA->next = rearB->next->next;

q = rearB->next;

rearB->next = p ;

free(q);

雙向鏈表

雙向鏈表 是在單鏈表的每個結(jié)點中,再設(shè)置一個指向其前驅(qū)結(jié)點的指針域

單向鏈表可以存在循環(huán)鏈表。那么雙向鏈表也可以存在循環(huán)鏈表。

雙向鏈表的插入操作

  • 改變插入元素的前驅(qū)和后繼
  • 改變后繼的前驅(qū)
  • 改變前驅(qū)的后繼

s->prefix = p;

s->next = p->next;

p->next->prefix = s;

p->next = s

雙向循環(huán)鏈表的刪除操作

  • p->prefix->next = p->next
  • p->next->prefix = p->prefix

總結(jié)

雙向鏈表對于單鏈表而言要復(fù)雜,因為多了prefix指針,對于插入和刪除時候要格外小心。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容