專題一之煉表 關於鍊錶的基礎知識及具體實現

2021-09-11 17:48:00 字數 2903 閱讀 2407

一、定義:

1.n個節點離散分配;彼此通過指標相連

2.每個節點只有乙個前驅結點和乙個後續節點

3.首節點沒有前驅節點;尾節點沒有後續節點

二、專業術語:

1.首節點:第乙個有效節點

2.尾節點:最後乙個有效節點

3.頭節點:首節點之前的那個節點 ,並不存放有效資料,目的只是為了方便鍊錶的操作

4.頭指標:指向頭節點的指標變數

5.尾指標:指向尾節點的指標變數

三、鍊錶必備的引數:頭指標

原因:我們通過頭指標可以推算出乙個鍊錶的其他所有資訊

四、分類

1.單鏈表

2.雙鏈表:每乙個節點有兩個指標域(指前指後)

3.迴圈鍊錶:能通過任何乙個節點找到其他所有節點(最後乙個節點的尾指標指向第乙個節點指向)

4.非迴圈鍊錶

五、演算法

遍歷

查詢清空

銷毀求長度

排序刪除節點

插入節點

六、程式

//標頭檔案

#include#include#include//定義節點的結構體

typedef struct node

node, *pnode;

//函式宣告

pnode createnode(); //建立節點

pnode createlist(pnode); //建立鍊錶

void displaylist(pnode); //顯示鍊錶

bool isempty(pnode); //判斷鍊錶是否為空

bool i***istpos(pnode, int); //判斷長度

int lengthlist(pnode); //輸出鍊錶長度

bool insertlist(pnode, int, int); //插入節點

bool deletelist(pnode, int); //刪除節點

void sortlist(pnode); //排序鍊錶

//主函式入口

int main()

//建立節點

pnode createnode()

pnew->pnext = null; //將指標域置空

return pnew;

}//建立鍊錶

pnode createlist(pnode phead)

return phead;

}//顯示鍊錶

void displaylist(pnode phead)

printf("\n");

return;

}//判斷鍊錶是否為空

bool isempty(pnode phead)

return false;

}//判斷鍊錶長度

int lengthlist(pnode phead)

return len;

}//判斷鍊錶輸入的位置在鍊錶中是否存在

bool i***istpos(pnode phead, int pos)

return false;

}//在鍊錶中插入節點

bool insertlist(pnode phead, int pos, int val) //pos代表你要插入到第幾個節點,val代表你要插入的值

pnode pnew = createnode(); //為新插入的節點分配空間

pnode pprint = phead; //定義乙個游標指標,用來指向當前節點

//迴圈遍歷,使游標指標定位到要插入的位置

while (pos != 1)

pnew->pnext = pprint->pnext; //將新建立的節點指向要插入位置的後乙個節點

pnew->data = val;

pprint->pnext = pnew; //將新建立的節點掛到鍊錶上

return true;

}//在鍊錶中刪除節點

bool deletelist(pnode phead, int pos) //pos表示要刪除節點的位置

pnode pprint = phead; //定義乙個游標指標,用來指向當前節點

//迴圈遍歷,使游標指標定位到要刪除的位置

while (pos != 1)

pnode pdelete = pprint->pnext; //定義乙個指標存放要刪除的節點

pprint->pnext = pprint->pnext->pnext; //使要刪除的節點的前乙個節點,指向要刪除的節點的後乙個節點(這一步自己畫圖更清晰)

free(pdelete); //釋放要刪除節點的記憶體

return true;

}//排序鍊錶

void sortlist(pnode phead)

pnode pprint; //定義乙個游標指標 //等價與i(請看排序核心)

pnode qprint; //定義乙個游標指標 //等價與j(請看排序核心)

int temp; //交換變數

int i, j;

for (i = 0, pprint = phead->pnext; i < lengthlist(phead)-1; i++, pprint=pprint->pnext)

}} return;

}

鍊錶基礎知識

1.為什麼用linkedlist array是乙個非常有用的資料結構,但是有兩個限制 1 當改變原有array的size的時候需要將原有array的所有元素copy到新array中去 2 由於array的資料儲存在記憶體中是連續空間,導致插入和刪除都會帶來其他資料的移動。鍊錶是由一系列的節點組成,這...

鍊錶基礎知識

鍊錶之前要有一定的c語言基礎,如指標,結構體,分配記憶體malloc等,切勿操之過急。第一次接觸可能有點難度,我是把書上的 反覆敲,反覆看注釋,搞了好幾天,才漸漸懂了。閒話少說,上 include include 要用到malloc struct llist int main printf 聯絡人 ...

鍊錶的基礎知識

鍊錶基礎知識 typedef int datatype typedef struct listnode listnode,pnode 鍊錶的初始化 void slistinit pnode phead 建立新結點 pnode buynewnode datatype data 尾插 void slis...