7.19 单链表的补充和思维导图 以及部分单向循环链表和双链表

文章介绍了如何对单向链表进行简单排序,使用选择排序算法。此外,还展示了如何按值在链表中插入新元素以及按值修改链表中的元素。主函数调用相应被调函数完成这些操作,并通过Output函数显示结果。

1.单向链表简单排序

主函数:

	//选择排序
	choose(L);
	Output(L);
	

被调函数:

//选择排序
void choose(Linklist L)
{   if(L==NULL || L->next==NULL)
	    return;
	int len=len_link(L);
	Linklist p,q;
	datatype max;
	for(int i=0;i<len;i++)
	{   q=L,p=L;
		max=L->data;
		int j;
		for(j=1;j<len-i;j++)
		{   q=q->next;
			if((q->data) > max)
			{   max=q->data;p=q;}
		}
		if(p!=q)
		{   datatype t=p->data;p->data=q->data;q->data=t;}
	}
}

2.单向链表按值插入

主函数:

	//按元素插入
	datatype key;
	printf("enter insert_key:");
	scanf("%d",&key);
	printf("enter insert_key ele:");
	scanf("%d",&ele);
	insert_key(key,ele,L);
	Output(L);

被调函数:

//按元素插入
void insert_key(datatype key,datatype ele,Linklist L)
{   int pos=search_key(key,L);
	insert_pos(pos,ele,L);
}

//任意位置查找
int search_pos(int pos,Linklist L)
{   int len=len_link(L);
	if(L==NULL || pos<1 || pos>len)
	{   puts("search_pos error");
		return -1;}
	Linklist p=L;
	for(int i=1;i<pos;i++)
		p=p->next;
	printf("查找到的值为:%d\n",p->data);
	return 0;
}
//任意位置插入
Linklist insert_pos(int pos,datatype ele,Linklist L)
{   int len=len_link(L);
	if(L==NULL || pos<1 || pos>len+1)
	{   puts("insert_pos error");
		return L;}
	Linklist s=Create();
	s->data=ele;
	if(pos==1)
	{   s->next=L;
		L=s;
	    return L;}
	Linklist p=L;
	for(int i=1;i<pos-1;i++)
		p=p->next;
	s->next=p->next;
	p->next=s;
	return L;
}

3.单向链表按值修改

主函数:

	//按元素修改
	printf("enter update_key:");
	scanf("%d",&key);
	printf("enter update_key ele:");
	scanf("%d",&ele);
	update_key(key,ele,L);
	Output(L);

被调函数:

//按元素修改
void update_key(datatype key,datatype ele,Linklist L)
{   int pos=search_key(key,L);
	update_pos(pos,ele,L);
}

//任意位置修改
Linklist update_pos(int pos,datatype ele,Linklist L)
{   int len=len_link(L);
	if(L==NULL || pos<1 || pos>len)
	{   puts("update_pos error");
		return L;}
	Linklist p=L;
	for(int i=1;i<pos;i++)
		p=p->next;
	p->data=ele;
	return L;
}

//任意位置查找
int search_pos(int pos,Linklist L)
{   int len=len_link(L);
	if(L==NULL || pos<1 || pos>len)
	{   puts("search_pos error");
		return -1;}
	Linklist p=L;
	for(int i=1;i<pos;i++)
		p=p->next;
	printf("查找到的值为:%d\n",p->data);
	return 0;
}

代码运行结果:

 

思维导图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值