C語言單項鍊表的實現

2021-07-03 13:42:03 字數 4834 閱讀 9339

#include #include typedef  int typedata;

#define node_length sizeof(node)

/**定義鍊錶的結構體*/

typedef struct tagnode

node;

/*******函式宣告****************************/

node* createlist(typedata tdindata);

int foreachlist(node* pstinhead);

int insertlisttail(node* pstinhead, typedata tdindata);

int insertlisthead(node* pstinhead, typedata tdindata);

int getlistlength(node* pstinhead);

int dellisthead(node* pstinhead);

int dellisttail(node* pstinhead);

int sortlist(node* pstinhead, int ninflag);

int clearlist(node* pstinhead);

/*****************************************

函式功能:建立乙個新的鍊錶,帶頭節點

函式入參:tdindata 頭結點的值

返回值: 非null 成功

null 失敗

******************************************/

node* createlist(typedata tdindata)

pstnewnode->plnext = null;

pstnewnode->tddata = tdindata;

return pstnewnode;

}/*****************************************

函式功能:遍歷整個鍊錶,把鍊錶的值都顯示出來,

函式入參:pstinhead 鍊錶的頭結點

返回值:0 成功

1 失敗

******************************************/

int foreachlist(node* pstinhead)

while (null != pstinhead->plnext)

printf("%d\n", pstinhead->tddata);

return0;}

/*****************************************

函式功能:在鍊錶的尾部插入資料

函式入參:pstinhead 鍊錶的頭結點

tdindata 在尾部插入資料的值

返回值: 0 成功

1 失敗

******************************************/

int insertlisttail(node* pstinhead, typedata tdindata)

while (null != pstinhead->plnext)

node* pstnewnode = (node*)malloc(node_length);

if (null == pstnewnode)

pstnewnode->plnext = null;

pstnewnode->tddata = tdindata;

pstinhead->plnext = pstnewnode;

return0;}

/*****************************************

函式功能:在鍊錶的首部插入資料,就是在頭結點的後面插入資料

函式入參:pstinhead 鍊錶的頭結點

tdindata 在尾部插入資料的值

返回值: 0 成功

1 失敗

******************************************/

int insertlisthead(node* pstinhead, typedata tdindata)

node* pstnewnode = (node*)malloc(node_length);

if (null == pstnewnode)

pstnewnode->tddata = tdindata;

/**將該節點插入頭部*/

pstnewnode->plnext = pstinhead->plnext;

pstinhead->plnext = pstnewnode;

return0;}

/*****************************************

函式功能:刪除頭結點

函式入參:pstinhead 鍊錶的頭結點

返回值: 0 成功

1 失敗

******************************************/

int dellisthead(node* pstinhead)

int nlistlen = getlistlength(pstinhead);

node* psttempnode = null;

/**鍊錶的長度至少為2的時候,才能刪除頭部*/

if (nlistlen >= 2)

return0;}

/*****************************************

函式功能:獲得鍊錶的長度,包括頭結點

函式入參:pstinhead 鍊錶的頭結點

返回值: 0 成功

1 失敗

******************************************/

int getlistlength(node* pstinhead)

while (null != pstinhead)

return nlen;

}/*****************************************

函式功能:刪除鍊錶的尾節點

函式入參:pstinhead 鍊錶的頭結點

返回值: 0 成功

1 失敗

******************************************/

int dellisttail(node* pstinhead)

int nlistlen = getlistlength(pstinhead);

/**如果只有頭結點直接返回*/

if (1 == nlistlen)

while (null != pstinhead->plnext->plnext)

node* psttempnode = pstinhead->plnext;

pstinhead->plnext = null;

free(psttempnode);

return0;}

/*****************************************

函式功能:對整個鍊錶進行排序,頭結點不參與排序

函式入參:pstinhead 鍊錶的頭結點

ninflag 0 降序,1公升序

返回值: 0 成功

1 失敗

******************************************/

int sortlist(node* pstinhead, int ninflag)

int nlistlen = getlistlength(pstinhead);

/**如果只有頭結點,不用比較,直接返回*/

if (1 == nlistlen)

node* psttempnode = null;

pstinhead = pstinhead->plnext;

typedata tdtempdata = 0;

/**如果是正序排列*/

if (0 == ninflag)

psttempnode = psttempnode->plnext;

}pstinhead = pstinhead->plnext;}}

/**如果是反序排列*/

else

if (1 == ninflag)

psttempnode = psttempnode->plnext;

}pstinhead = pstinhead->plnext;}}

else

return0;}

/*****************************************

函式功能:清空整個鍊錶

函式入參:pstinhead 鍊錶的頭結點

返回值: 0 成功

1 失敗

******************************************/

int clearlist(node* pstinhead)

int nlistlen = getlistlength(pstinhead);

/**暫存鍊錶的頭結點*/

node* psttemphead = pstinhead;

/**如果只有頭結點直接返回*/

if (1 == nlistlen)

node* psttempnode = null;

pstinhead = pstinhead->plnext;

while (null != pstinhead)

psttemphead->plnext = null;

return0;}

int main()

建立單項鍊表,然後實現單項鍊表逆序

建立乙個任意數目的單項鍊表,每項的位置作為自己的初始資料 返回鏈頭 node initlink int num return head 輸出單項鍊表的全部資料 void display node head node curnode head while curnode.next null syste...

關於c語言單項鍊表尾新增

猶豫了幾天,看了很多大牛寫的關於c語言鍊錶,感觸很多,終於下定決心,把自己對於鍊錶的理解隨之附上,可用與否,自行裁奪。由於作者水平有限也是第一次寫,不足之處,竭誠希望得到各位大神的批評指正。製作不易,不喜勿噴,謝謝!在正文開始之前,我先對陣列和鍊錶進行簡單的對比分析。鍊錶也是一種很常見的資料結構,不...

單項鍊表反轉

遍歷,將當前節點的下乙個節點快取後更改當前節點指標 public static node reverse node head node pre head node cur head.getnextnode node next while null cur 將原鍊錶的頭節點的下乙個節點置為null,再...