node.h
#ifndef node_h
#define node_h
//不帶頭結點的單鏈表
typedef struct node
node,*pnode;
#endif // node_h
list.h
#ifndef list_h
#define list_h
#include "node.h"
//頭插
void insertbyhead(pnode *phead, int
value);
//尾插
void insertbytail(pnode *phead, int
value);
//頭刪
void deletebyhead(pnode *phead);
//尾刪
void deletebytail(pnode *phead);
//按值查詢
pnode findbyvalue(pnode phead, int
value);
//按索引查詢
pnode findbyindex(pnode phead, int index);
//按值修改
void updatebyvalue(pnode phead, int oldval, int newval);
//獲取鍊錶長度
int getlength(pnode phead);
//按索引修改
void updatebyindex(pnode phead, int index, int
value);
//按索引插入
void insertbyindex(pnode *phead, int index, int
value);
//按值刪除
void deletebyvalue(pnode *phead, int
value);
//按索引刪除
void deletebyindex(pnode *phead, int index);
//鍊錶反序(迭代)
void reverse(pnode *phead);
//鍊錶反序(遞迴)
void reverselink(pnode *phead);
//清空鍊錶
void clear(pnode *phead);
//顯示鍊錶
void showlist(pnode phead);
#endif // !list_h
list.c
#include "node.h"
#include
#include
void insertbyhead(pnode *phead, int value)
pnew->value = value;
pnew->next = *phead;
*phead = pnew;
}void insertbytail(pnode *phead, int value)
else
pnew->value = value;
pnew->next = null;
pnode pos = *phead;
while (pos->next != null)
pos->next = pnew;
}}void deletebyhead(pnode *phead)
}void deletebytail(pnode *phead)
else
free(pos->next);
pos->next = null;
}}pnode findbyvalue(pnode phead, int value)
else
break;
}return
pos;
}void updatebyvalue(pnode phead, int oldval, int newval)
}int getlength(pnode phead)
return count;
}pnode findbyindex(pnode phead, int
index)
}return
pos;
}void updatebyindex(pnode phead, int
index, int value)
}void insertbyindex(pnode *phead, int
index, int value)
else
if (index > 0 && index
<= getlength(*phead))
pnode pnew = (pnode)malloc(sizeof(node));
if (null == pnew)
pnew->value = value;
pnew->next = pos->next;
pos->next = pnew;
}}void reverse(pnode *phead)//非遞迴(迭代)
else
(*phead)->next = null;
*phead = p1;
}}void reverselink(pnode *phead)//遞迴
else
}void deletebyvalue(pnode *phead, int value)
else
}if ((*phead)->value == value)
}void deletebyindex(pnode *phead, int
index)
else
if (index > 0 && index
*phead))
pnode temp = pos->next;
pos->next = temp->next;
free(temp);
temp = null;
}}void clear(pnode *phead)
}void showlist(pnode phead)
printf("\n");
}
main.c
int main(void)
不帶頭結點的單鏈表的基本操作
1 標頭檔案 nlist.h pragma once 不帶頭結點的單鏈表 typedef struct nnode nnode,nlist 鍊錶初始化 void initlist nlist pplist 頭插 bool insert head nlist pplist,int val 尾插 boo...
不帶頭結點的單鏈表
slist.h pragma once typedef int sldatatype typedef struct slistnode slistnode 不帶頭節點的單鏈表 鍊錶初始化 void slistinit slistnode phead 建立新結點 slistnode slistnewn...
不帶頭結點的單鏈表
不帶頭結點的鍊錶的實現 核心是直接設定頭指標指向第乙個節點 要注意此時的l的位址可能會發生改變.同時還要注意一級指標和二級指標的區別.注意linklist l和linklist l的區別 和帶結點的單鏈表的操作相比較,要考慮到頭指標就是頭結點,在一些會改變頭結點的情況下要仔細考慮.include i...