#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//节点
typedef struct LinkNode
{
struct LinkNode* next;
}LinkNode;
//链表
typedef struct LINKLIST
{
LinkNode pHead;
int size;
}LinkList;
//自定义数据类型
typedef struct PERSON
{
LinkNode node;
char name[64];
int age;
}Person;
typedef void(*PRINTLINKLIST)(LinkNode*);
//自定义打印函数
void Myprint(LinkNode* data)
{
Person* p = (Person*)data;
printf("name=%s,age=%d",p->name,p->name);
}
//初始化
LinkList* Init_List()
{
LinkList* list = (LinkList*)malloc(sizeof(LinkList));
list->pHead.next = NULL;
list->size = 0;
return list;
}
//插入
void Insert_List(LinkList* list,int pos,LinkNode* data)
{
if(!list)return;
if(!data)return;
//找到插入前一个位置
LinkNode* pCurrent = &(list->pHead);
for(int i = 0;i< pos;i++)
{
pCurrent = pCurrent->next;
}
//插入
data->next = pCurrent->next;
pCurrent->next = data;
list->size++;
}
//删除
void Remove_List(LinkList* list,int pos)
{
if(!list)return;
if(pos<0||pos>list->size)return;
//找到删除位置的前一个
LinkNode* pCurrent = &(list->pHead);
for(int i = 0;i<pos;i++)
{
pCurrent = pCurrent->next;
}
//删除
LinkNode* temp = pCurrent->next;
pCurrent->next = temp->next;
free(temp);
list->size--;
}
//打印
void Print_List(LinkList* list,PRINTLINKLIST print)
{
if(!list)return;
//遍历打印
LinkNode* pCurrent = list->pHead.next;
while(pCurrent)
{
LinkNode* Next = pCurrent->next;
print(pCurrent);
pCurrent = Next;
}
}
//返回链表长度
int Size_List(LinkList* list)
{
if(!list)return;
return list->size;
}
//清空链表
void Destory_List(LinkList* list)
{
if(!list)return;
//遍历删除
LinkNode* pCurrent = &(list->pHead);
while(pCurrent)
{
LinkNode* Next = pCurrent->next;
free(pCurrent);
pCurrent = Next;
}
}
int main()
{
LinkList* list = Init_List();
Person p1,p2,p3,p4,p5;
strcpy(p1.name,"aaa");
strcpy(p2.name,"bbb");
strcpy(p3.name,"ccc");
strcpy(p4.name,"ddd");
strcpy(p5.name,"eee");
p1.age = 11;
p2.age = 12;
p3.age = 13;
p4.age = 14;
p5.age = 15;
Insert_List(list,1,(LinkNode*)&p1);
Insert_List(list,2,(LinkNode*)&p2);
Insert_List(list,3,(LinkNode*)&p3);
Insert_List(list,4,(LinkNode*)&p4);
Insert_List(list,5,(LinkNode*)&p5);
Print_List(list,Myprint);
Destory_List(list);
return 0;
}
企业链表(Linux内核链表改进)
最新推荐文章于 2021-03-21 09:38:07 发布