單鏈表的增刪查改,以及雙向鍊錶的有關操作

2021-08-22 04:43:21 字數 1892 閱讀 2311

最近在回顧線性儲存結構-鏈式儲存有關的操作,到現在基本上覆習完畢,整理相關**如下:

#include #include #include struct nodenode;

typedef struct node* linklist;

linklist createmptylist() //建立空表

p->next = null;

return p;

}linklist creatlist_head(linklist l)//頭插建立

return l;

}linklist creatlist_tail(linklist l)//尾插建立

// rump->next = null;//rump的下乙個結點置空

return l;

}int clearlist(linklist l) //清空鍊錶

l->next = null;

printf("已經清空!");

}int getitem(linklist l,int i)//查詢

if(!p)

return p->data;

}int listre(linklist l,int i,int num) //修改

if(!p)

p->data = num;

}int linkinsert(linklist l,int i,int num)//插入

if(!p)

s->data = num;

s->next = p->next;

p->next = s;

// s->next = p;

// s = p;

}int listdelete(linklist l, int i)//刪除

p = l;

while(p && j < i)

if(!p)

q = p->next; //用q來表示p的下乙個結點

p->next = q->next; //繞過q,直接讓p->next 指向 q的後繼

free(q); // 釋放掉q

// q = p->next;

// free(p);

// p = q;

}int printlist(linklist l)//列印鍊錶

printf("\n");

}int main()

在寫關於尾插法的時候,發現寫法有兩種,當然嚴格意義上講是同一種,第一種是pnew結點的next直接指向null,這樣每次加入的pnew的後一位都是null,當pnew成為尾結點的時候已經完成了封尾,另一種就是在完成結點新增以後,r仍然指向尾結點的時候,r->next指向null,完成封尾。

以下是有關雙向鍊錶的操作:

#include #include #include struct node

;typedef struct node *circlelist;

circlelist creatlist()

l->pr = l;

l->next = l;

return l;

}circlelist circlelist_insert(circlelist l)//頭插

return l;

}int circlelist_delete(circlelist l,int num)//刪除

// q = p;

p->pr->next = p->next;

p->next->pr = p->pr;

free(p);

}int printlist(circlelist l)//列印鍊錶

printf("\n");

}int main()

單鏈表以及雙向鍊錶的操作

include include define max 30 typedef struct s 單向鍊錶的儲存結構 s,linklist typedef struct dulist 雙向鍊錶的儲存結構 dulnode,dulinklist int initlist s s 建立空的單鏈表 void s...

雙向鍊錶的增刪改查

package com.mjw.linkedlist 1.遍歷 和單鏈表的思路一致 2.新增 先找到雙向鍊錶的最後 temp.next new heronode newheronode.pre temp 3.修改也是和單鏈表的思路一致 4.刪除 因為是雙向鍊錶,可以自我刪除,直接找到要刪除的結點,比...

雙向鍊錶的增刪改查

雙向鍊錶增刪改查 單向鍊錶查詢的方向只能是乙個方向,而雙向鍊錶可以向前或者向後查詢 單向鍊錶不能自我刪除,需要輔助節點,而雙向鍊錶可以自我刪除,public class doublelinkedlistdemo class doublelinkedlist 遍歷雙向鍊錶的方法,顯示鍊錶 遍歷 pub...