單鏈表的基本操作(不帶頭結點)

2021-08-22 14:46:24 字數 3199 閱讀 5687

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...