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