数据结构单链表

1.任意位置删除

Linklist anydelete(datatype g,Linklist head)
{
	datatype len = leng(head);
	if(g<1 || g>len)
		return head;
	if(head->next == NULL|| g==1)
		return head_del(head);
	else
	{
		Linklist p = head;
		for(datatype i = 1; i < g-1 ; i++)
		{
			p=p->next;
		}
		Linklist q = p->next;
		p->next = q->next;
		free(q);
		q->next=NULL;
		return head;
	}
}

2.任意位置修改

Linklist revisedata(datatype g,datatype elements,Linklist head)
{
	datatype len = leng(head);
	if(g<1 || g>len)
		return head;
	Linklist p = head;
	for( datatype i = 1 ; i < g ; i++ )
	{
		p=p->next;
	}
	p->data=elements;
	return head;
}

3.任意位置查找

int finds(datatype g,Linklist head)
{
	datatype len = leng(head);
	if(g<1 || g>len)
		return -1;
	Linklist p = head;
	for(datatype i = 1 ; i < g ; i++ )
	{
		p=p->next;
	}
	return p->data;
}

4.单链表任意元素查找

int finds_data(datatype elements,Linklist head)
{
	if(NULL==head)
		return -1;
	Linklist p=head;
	datatype datai=0;
	while(p != NULL)
	{
		datai++;
		if(elements == p->data)
		{
			return datai;
			break;
		}
		p=p->next;
	}
	return -1;
}

5.单链表任意元素修改

void revise(datatype elements,datatype newelements,Linklist head)
{
	datatype t = finds_data(elements,head);
	revisedata(t,newelements,head);
}

6.单链表任意元素删除

//按元素删除
void del_data(datatype elements,Linklist head)
{
	datatype t = finds_data(elements,head);
	anydelete(t,head);
}

7.逆置

Linklist nizhi(Linklist head)
{
	Linklist p = head->next;
	head->next=NULL;
	while(p != NULL)
	{
		Linklist t = p;
		p=p->next;
		t->next=head;
		head=t;
	}
	return head;
}

8.找倒数第n节点

void catn(Linklist head,datatype n)
{
	if(NULL==head)
		return ;
	Linklist q=head;
	Linklist p=head;
	for(datatype i=0;inext;
	}
	while(q != NULL)
	{
		q=q->next;
		p=p->next;
	}
	printf("%d\n",p->data);
}

9.排序

Linklist paixu(Linklist head,datatype c)
{
	datatype i,j,len;
	len = leng(head);
	if(1==c)
	{
		for(i=0;idata > p->next->data)
				{
					datatype t = p->data;
					p->data = p->next->data;
					p->next->data = t;
				}
				p=p->next;
			}
		}
	}
	else if(c==0)
	{
		Linklist min = head;
		for(Linklist i = head;i != NULL;i=i->next)
		{
			min = i;
			for(Linklist j=i->next;j != NULL;j=j->next)
			{
				if(j->data > i->data)
				{
					min = j;
				}
			}
			if(min != i)
			{
				datatype t = i->data;
				i->data = min->data;
				min->data = t;
			}
		}
	}
		return head;
}

10释放内存

Linklist free_space(Linklist head)
{
    if(NULL==head)
        return NULL;
    Linklist p=head;
    while(p!=NULL)
    {
        p=head_del(p);
    }
    head=NULL;
    return head;
}

你可能感兴趣的:(数据结构,算法)