#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,再...