华清远见上海中心22071班 8.24作业

1.单向链表按位置修改

void list_update_pos(linklist *L,int pos,datatype e)
{
	if(NULL==L||list_empty(L)||pos<0||pos>L->len)
	{
		printf("修改失败\n");
		return ;
	}
	linklist *p=list_find_node(L,pos);
	p->data=e;
	printf("修改成功\n");
}

2.单向链表的翻转 (非递归)

void list_reverse(linklist *L)
{
	if(NULL==L)
	{
		printf("翻转失败\n");
		return ;
	}
	linklist *p=L->next;
	L->next=NULL;
	linklist *s=NULL;
	while(p)
	{
		s=p->next;
		p->next=L->next;
		L->next=p;
		p=s;
	}
	printf("翻转完成\n");	
}

 单向链表的翻转 (递归):

linklist *reverse(linklist* L)
{
	if(L==NULL||L->next==NULL)
   	{
   		return L;
   	}else
	{ 
		linklist *p=reverse(L->next);
		L->next->next=L;
		L->next=NULL;
		return p;
	}
}

递归代码经过多次修改测试仍然会出现段错误和乱码 w,原因尚不明确

输出结果:

3.双向链表尾插、头删、按值修改

int insert_tail(doublelink *d,datatype e)
{
	if(NULL==d)
	{
		printf("插入失败\n");
		return -1;
	}
	doublelink *p=apply(e);
	if(empty(d))
	{
		d->next=p;
		p->prio=d;
	}else
	{
		doublelink *q=find(d,d->len);
		q->next=p;
		p->prio=q;
	}
	d->len++;
	printf("插入成功\n");
	return 0;
}
int delet_head(doublelink *d)
{
	if(NULL==d||empty(d))
	{
		printf("删除失败\n");
		return -1;
	}
	doublelink *p=d->next;
	if(p->next==NULL)
	{
		p->prio->next=NULL;
		free(p);
	}else
	{
		p->prio->next=p->next;
		p->next->prio=p->prio;
		free(p);
	}
	d->len--;
	p=NULL;
	printf("删除成功\n");
	return 0;
}
int update_value(doublelink *d,datatype old_e,datatype new_e)
{
	if(NULL==d||empty(d))
	{
		printf("修改失败\n");
		return -1;
	}
	doublelink *q=d->next;
	while(q!=NULL)
	{
		if(q->data==old_e)
		{
			q->data=new_e;
		}
		q=q->next;
	}
	printf("修改成功\n");
	return 0;
}

 输出结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值