数据结构——单向链表-双向链表

1、单向链表按位置修改

//按位置修改
int updata_pos(linklist *L,int pos,datatype new_e)
{
	if(NULL==L||empty(L)||pos<1||pos>L->len)
	{
		printf("修改失败\n");
		return -1;
	}
	linklist *p=find_node(L,pos);
	p->data=new_e;
	printf("修改成功\n");
	return 0;
}

2、单向链表的反转——非递归方式 

//链表反转
void list_reverse(linklist *L)
{
	if(NULL==L||empty(L))
	{
		printf("反转失败\n");
		return ;
	}
//方案一:头插反转
/*	linklist *p=L->next;
	linklist *q=p->next;
	for(int i=0;ilen-1;i++)
	{
		p->next=q->next;
		q->next=L->next;
		L->next=q;
		q=p->next;
	}
	//方案二:
	linklist *q=L->next;
	linklist *p=find_node(L,L->len);

	for(int i=0;ilen-1;i++)
	{
		L->next=q->next;
		q->next=p->next;
		p->next=q;
		q=L->next;
	}*/
}

 3、双向链表尾插

//尾插
int tail_add(doublelink *D,datatype e)
{
	if(NULL==D)
	{
		printf("插入失败\n");
		return -1;
	}
	doublelink *q=D;
	while(q->next!=NULL)
	{
		q=q->next;
	}
	doublelink *p=node_buy(e);
	p->prio=q;
	p->next=q->next;
	q->next=p;
	D->len++;
	return 0;

}

 双向链表头删

//头删
int head_del(doublelink *D)
{
	if(NULL==D||empty(D))
	{
		printf("删除失败\n");
		return -1;
	}
	doublelink *q=D->next;
	q->next->prio=D;
	D->next=q->next;
	free(q);
	D->len--;
	q=NULL;
}

双向链表按值修改

//按值修改
int mod_value(doublelink *D,datatype old_e,datatype new_e)
{
	if(NULL==D||empty(D))
	{
		printf("修改失败\n");
		return -1;
	}
	doublelink *q=D->next;
	for(int i=0;ilen;i++)
	{
		if(q->data==old_e)
		{
			q->data=new_e;
		}
		q=q->next;
	}
	return 0;
}

你可能感兴趣的:(数据结构,链表,数据结构)