&4单项链表(链式存储)测试

对&3代码进行测试
在这里插入图片描述

//自定义数据类型
typedef struct PERSON
{
	//创建链表
	char name[50];
	int age;
	int score;
}Person;
void MyPrint(void *data)
{
	Person *p=(Person *)data;
	printf("Name:%s;Age:%d,Score:%d\n",p->name,p->age,p->score);

}
void test01()
{
	//创建列表
	LinkList *list=Init_LinkList();
	//创建数据
	Person p1={"ggj",22,100};
	Person p2={"wjy",21,98};
	Person p3={"zqx",23,96};
	Person p4={"lx",21,96};
	Person p5={"xxr",21,96};
	//把数据插入链表
	insert_LinkList(list,0,&p1);
	insert_LinkList(list,0,&p2);
	insert_LinkList(list,0,&p3);
	insert_LinkList(list,0,&p4);
	insert_LinkList(list,0,&p5);
	//打印
	PrintLinkList(list,MyPrint);
	//销毁链表
	FreeSpace_LinkList(list);
}
int main(void)
{
	test01();
	getch();

	return 0;
}
``测试结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2b2baf6214194761855425c25ba35f46.png)
`代码解释:
//自定义数据类型
定义用户传入信息的结构体
```cpp
typedef struct PERSON
{
	//创建链表
	char name[50];
	int age;
	int score;
}Person;
```//创建链表

```cpp
	LinkList *list=Init_LinkList();
	创建链表函数
//NULL头文件是stdlib
	//return NULL;
	LinkList *list=(LinkList*)malloc(sizeof(LinkList));
	list->size=0;
	//头结点是不保存任何信息的,它的出现是让我们少讨论多种情况
	list->head=(LinkNode*)malloc(sizeof(LinkNode));
	//初始化头结点
	list->head->data=NULL;
	list->head->next=NULL;
	return list;
//创建数据
	Person p1={"ggj",22,100};
	Person p2={"wjy",21,98};
	Person p3={"zqx",23,96};
	Person p4={"lx",21,96};
	Person p5={"xxr",21,96};
	//把数据插入链表
	insert_LinkList(list,0,&p1);
	insert_LinkList(list,0,&p2);
	insert_LinkList(list,0,&p3);
	insert_LinkList(list,0,&p4);
	insert_LinkList(list,0,&p5);
```//将这些信息插入对用插入函数
//指定位置插入

```cpp
void insert_LinkList(LinkList *list,int pos,void *data)
{
	if(list==NULL)
	{
		return;
	}
	if(data==NULL)
	{
		return;
	}
	//友好处理,pos越界
	if(pos<0||pos>list->size)
	{
		pos=list->size;
	}
	//创建新的结点
	LinkNode *newnode=(LinkNode*)malloc(sizeof(LinkNode));
	newnode->data=data;
	newnode->next=NULL;
	//结点已经创建好,所以我现在要链接起来到链表结构体

	//栈结点
	//辅助指针变量
	 LinkNode *pCurrent=list->head;
	 for(int i=0;i<pos;i++)
	 {
		pCurrent=pCurrent->next;
	 }
	 //新节点接入链表
	 newnode->next=pCurrent->next;
	 pCurrent->next=newnode;
	 list->size++;
}
//删除指定位置的值
RemoveByPos_LinkList(list,1);
```![在这里插入图片描述](https://img-blog.csdnimg.cn/7762a091415942a38e3ebbe06c22ba27.png)
对用函数:

```cpp
//删除指定位置的值
void RemoveByPos_LinkList(LinkList *list,int pos)
{
	if(list==NULL)
	{
		return;
	}
		//删除无法做友好处理,pos越界
	if(pos<0||pos>list->size)
	{
		return;
	}
	//删除节点的前一个节点
	LinkNode *pCurrent=list->head;
	for(int i=0;i<pos;i++)
	{
		//通过这种方式找到我们所需要的结点位置
		pCurrent=pCurrent->next;
	}
	//缓存删除节点
	LinkNode *pDel=pCurrent->next;
	pCurrent->next=pDel->next;
	//把整个内存释放
	free(pDel);
	list->size--;
}
```//销毁链表就是把链表申请的内存释放

```cpp
//释放链表内存
void FreeSpace_LinkList(LinkList *list)
{
	if(list==NULL)
	{
		return;
	}
	//辅助指针变量
	LinkNode *newnode=list->head;
	while(newnode!=NULL)
	{
		//这样释放结点会导致你先前释放掉找不到了,无法找到下一个结点
		//free(newnode);
		//newnode=newnode->next;
		//所以缓存下一个结点
		LinkNode *pNext=list->head->next;
		free(newnode);
		newnode=pNext;
	}
	//释放链表占内存
	free(list);
}

```cpp
```	printf("链表长度为%d\n",size);
	PrintLinkList(list,MyPrint);
	Person *ret=(Person *)Front_LinkList(list);
	printf("链表第一个元素的数据为Name:%s;Age:%d,Score:%d\n",ret->name,ret->age,ret->score);
	
```cpp对应函数
```void *Front_LinkList(LinkList *list)
{

	return list->head->next->data;
}




有问题请联系qq:2832352904

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值