单向链表框架搭建
LinkList结构体
- 链表结点
typedef struct LINKNODE{
void *data; //指向任何数据类型
struct LINKNODE* next;
}LinkNode;
链表结构体
typrdef struct LINKLIST{
LinkNode* head;
int size;
}Linklist;
- 打印函数指针
typedef void(*PRINTLINKNODE)(void*);
LINKLIST结构体相关函数操作
- 初始化链表
Linklist* Init_Linklist(){
Linklist* list=(Linklist*)malloc(sizeof(Linklist)); //分配内存
list->size=0;
//头结点 不保存数据信息
list->head=(LinkNode*)malloc(sizeof(LinkNode)); //分配内存
list->head->data=NULL;
list->head->next=NULL;
}
- 指定位置插入
void Insert_Linklist(Linklist* list,int pos,void* data){
if(list==NULL){
return;
}
if(data==NULL){
return;
}
//若pos越界
if(pos<0||pos>list->size){
post=list->size;
}
//创建新的节点
LinkNode* newnode=(LinkNode*)malloc(sizeof(LinkNode));
newnode->data=data;
newnode->next=NULL;
//找节点 ,辅助指针变量
LinkNode* curp=list->head;
for(int i=0;i<pos;i++){
curp=curp->next;
}
//新节点插入链表
newnode->next=curp->next;
curp-next=newnode;
list->size++;
}
- 删除指定位置的值
void Remove_Linklist(Linklist* list,int pos){
if(list==NULL){
return;
}
if(pos<0||pos>=list->size){
return;
}
//查找删除节点的前一个节点
Linklist* curp=list->head;
for(int i=0;i<pos;i++){
curp=curp->next;
}
//删除缓存节点
LinkNode* delp=curp->next;
curp->next=delp->next;
//释放删除节点内存
free(delp);
list->size--;
}
- 获得链表的长度
int Size Linklist(Linklist* list){
return list->size;
}
- 查找
int Find_Linklist(Linklist* list,void* data){
if(list==NULL){
return -1;
}
if(data==NULL){
return -1;
}
//遍历查找
LinkNode* curp=list->head->next;
int i=0;
while(curp!=NULL){
if(curp->data==data){
break;
curp=curp->next;
}
i++;
}
return i;
}
- 返回第一个结点
void* get First_Linklist(Linklistt* list){
return list->head->next->data;
}
- 打印链表结点
void Print_Linklist(Linklist* list,PRINTLINKNODE print){
if(list==NULL){
reutn;
}
//遍历,定义辅助指针变量
LinkNode* curp=list->head->next;
while(curp!=NULL){
print(curp->data);
curp=curp->next;
}
}
- 释放链表内存
释放链表内存
void Freespace_Linklist(Linklist* list){
if(list==NULL){
return;
}
//遍历辅助指针
LinkNode* curp=list->head;
while(curp!=NULL){
//要缓存下一个节点,再删除上一个节点,否则找不到
LinkNode* nextp=curp->next;
free(curp);
curp=nextp;
}
//释放链表内存
list->size=0;
free(list);
}