数据结构 day4 链表

数据结构 day4 链表_第1张图片

单向链表任意元素查找

单向链表任意元素修改

单向链表任意元素删除

单向链表逆置

单向链表查找倒数第n个节点

单向链表排序

单向链表释放内存

main.c

#include "head.h"
int main(int argc, const char *argv[])
{
	int n;
	Linklist head=NULL;
	datatype element;
	int pos;
	printf("请输入你要创建链表的个数n");
	scanf("%d",&n);
	for(int i=0;i

head.h

 

#ifndef __head_h__
#define __head_h__
#include 
#include
#include
typedef int datatype;
enum 
{
	false=-1,
	success
};
typedef struct node
{
	datatype data;
	struct node *next;
}*Linklist;
Linklist create(Linklist p);
Linklist headin(Linklist p,datatype element);
int output(Linklist head);
Linklist tailin(Linklist head,datatype element);
Linklist headdel(Linklist head);
Linklist taildel(Linklist head);
void search(Linklist head,datatype element);
Linklist in(Linklist head,int pos,datatype element);
Linklist del(Linklist head,int pos);
void find(Linklist head,int pos);
void repair(Linklist head,int pos,datatype element);
void repair2(Linklist head,datatype key1,datatype key2);
Linklist del2(Linklist head,datatype element);
Linklist deput(Linklist head);
void find2(Linklist head,int n);
void bubble(Linklist head);
Linklist free(Linklist head);
#endif

test.c

#include "head.h"
Linklist create(Linklist p)
{
	p=(Linklist)malloc(sizeof(struct node));
	if(p==NULL)
		return NULL;
	p->data=0;
	p->next=NULL;
	return p;
}
Linklist headin(Linklist head,datatype element)
{
	Linklist s=create(s);
	if(s==NULL)
		return head;
	s->data=element;
	s->next=head;
	head = s;
	return head;
}
int output(Linklist head)
{
	if(head==NULL)
		return false;
	Linklist p=head;
	while(p!=NULL)
	{
		printf("%-4d",p->data);
		p=p->next;
	}
	puts("");
	return success;
}
Linklist tailin(Linklist head,datatype element)
{
	Linklist s=create (s);
	s->data=element;
	if(NULL==head)
	{
		head=s;
		return head;
	}
	Linklist p=head;
	while(p->next!=NULL)
	{
		p=p->next;
	}
	p->next=s;
	return head;
}
Linklist headdel(Linklist head)
{
	if(head==NULL)
		return head;
	Linklist p=head;
	head=head->next;
	free(p);
	p=NULL;
	return head;
}
Linklist taildel(Linklist head)
{
	if(head==NULL)
		return NULL;
	if(head->next==NULL)
	{
		free(head);
		head=NULL;
		return head;
	}
	Linklist q=head;
	while(q->next->next!=NULL)
	{
		q=q->next;
	}
	free(q->next);
	q->next=NULL;
	q=NULL;
	return head;	
}
int length(Linklist head)
{
	Linklist p=head;
	int count=0;
	while(p!=NULL)
	{
		p=p->next;
		count++;
	}
	return count;
}
Linklist in(Linklist head,int pos,datatype element)
{
	if(pos<1||pos>length(head)+1)
		return head;
	if(pos==1)
	{
		head=headin(head,element);
		return head;
	}
	Linklist p=head;
	for(int i=1;inext;
	}
	Linklist s=create(s);
	if(s==NULL)
		return NULL;
	s->data=element;
	s->next=p->next;
	p->next=s;
	return head;
}
Linklist del(Linklist head,int pos)
{
	if(head==NULL||pos<1||pos>length(head))
		return head;
	if(pos==1)
	{
		head=headdel(head);
		return head;
	}
	Linklist p=head;
	Linklist q=NULL;
	for(int i=1;inext;
		q=p->next;
	}
	p->next=q->next;
	free(q);
	q=NULL;
	return head;
}
void find(Linklist head,int pos)
{
	if(pos<1||pos>length(head)||head==NULL)
		return;
	Linklist p=head;
	for(int i=1;inext;
	}
	printf("您查找的元素为%d\n",p->data);
}
void repair(Linklist head,int pos,datatype element)
{
	if(pos<1||pos>length(head)||head==NULL)
		return;
	Linklist p=head;
	for(int i=1;inext;
	}
	p->data=element;
}
 
 
void search(Linklist head,datatype element)
{
	int count=0;
	if(head==NULL)
		return;
	Linklist p=head;
	while(p!=NULL)
	{
		count++;
		if(p->data==element)
		{
			printf("已找到该元素是第%d个元素\n",count);
			break;
		}
		p=p->next;
	}
	return;
}
void repair2(Linklist head,datatype key1,datatype key2)
{
	if(head==NULL)
		return;
	Linklist p=head;
	while(p!=NULL)
	{
		if(p->data==key1)
		{
			p->data=key2;
		}
		p=p->next;
	}
}
Linklist del2(Linklist head,datatype element)
{
	if(head==NULL)
		return NULL;
	Linklist p=head;
	while(p->next->data!=element)
	{
		p=p->next;
	}
	Linklist q=p->next;
	p->next=q->next;
	free(q);
	q=NULL;
	return head;
}
Linklist deput(Linklist head)
{
	if(head==NULL||head->next==NULL)
		return head;
	Linklist p=head->next;
	Linklist q=head->next;
	head->next=NULL;
	while(q!=NULL)
	{
		q=q->next;
		p->next=head;
		head=p;
		p=q;
	}
	return head;
}
void find2(Linklist head,int n)
{
	if(head==NULL||n<1||n>length(head))
		return;
	Linklist p=head;
	Linklist q=head;
	for(int i=0;inext;
	}
	while(p!=NULL)
	{
		p=p->next;
		q=q->next;
	}
	printf("倒数第%d个元素为%d\n",n,q->data);
}
void bubble(Linklist head)
{
	Linklist p=head;
	int i,j;
	int len=length(head);
	for(i=1;idata>p->next->data)
			{
				datatype t=p->data;
				p->data=p->next->data;
				p->next->data=t;
			}
			p=p->next;
		}
	}
}
Linklist fre(Linklist head)
{
	if(head==NULL)
		return NULL;
	int len=length(head);
	for(int i=0;i

你可能感兴趣的:(嵌入式学习-数据结构,数据结构,链表)