数据结构 24/2/3 作业

1、单项循环链表的头插、头删、尾插、尾删

#include 
#include 
#include 
enum{FALSE=-1,SUCCESS};
typedef int datatype;
typedef struct Node
{
	//数据域
	datatype data;
	//指针域
	struct Node *next;
}*linklist;
linklist creat();
linklist insert_head(linklist head,datatype element);
void output(linklist head);
linklist insert_rear(linklist head,datatype element);
linklist del_head(linklist head);
linklist del_rear(linklist head);
//创建堆区地址
linklist creat()
{
	linklist s=(linklist)malloc(sizeof(struct Node));
	if(s==NULL)
		return NULL;
	s->data=0;
	s->next=s;
	return s;
}
//头插
linklist insert_head(linklist head,datatype element)
{
	linklist s=creat();
	s->data=element;
	if(head==NULL)
	{
		head=s;
	}
	else
	{
		linklist p=head;
		while(p->next!=head)
		{
			p=p->next;
		}
		s->next=head;
		head=s;
		p->next=head;
	}
	return head;
}
//遍历
void output(linklist head)
{
	if(head==NULL)
	{
		puts("empty");
		return;
	}
	linklist p=head;
	do
	{
		printf("%-5d",p->data);
		p=p->next;
	}while(p!=head);
	puts("");
}
//尾插
linklist insert_rear(linklist head,datatype element)
{
	linklist s=creat();
	s->data=element;
	if(head==NULL)
	{
		head=s;
	}
	else
	{
		//循环找到尾节点
		linklist p=head;
		while(p->next!=head)
		{
			p=p->next;
		}
		p->next=s;
		s->next=head;//尾节点指向头
	}
	return head;
}
//头删
linklist del_head(linklist head)
{
	if(head==NULL)
	{
		return head;
	}
	else
	{
		linklist del=head;
		linklist p=head;
		while(p->next!=head)
		{
			p=p->next;
		}
		head=head->next;
		free(del);
		del=NULL;
		p->next=head;
		return head;
	}
}
//尾删
linklist del_rear(linklist head)
{
	if(head==NULL)
	{
		return NULL;
	}
	else if(head->next==head)
	{
		free(head);
		head=NULL;
		return head;
	}
	else
	{
			linklist del=head;
			while(del->next->next!=head)
		{
			del=del->next;
		} 
		free(del->next);
		del->next=head;
		return head;
	}
}
int main(int argc, const char *argv[])
{
	//定义头指针
	linklist head=NULL;
	int n;
	datatype element;
	printf("please enter n:");
	scanf("%d",&n);
	//循环写入
	for(int i=0;i

2、单向循环链表实现约瑟夫环

#include 
#include 
#include 
enum{FALSE=-1,SUCCESS};
typedef int datatype;
typedef struct Node
{
	//数据域
	datatype data;
	//指针域
	struct Node *next;
}*linklist;
linklist creat();
linklist insert_rear(linklist head,datatype element);
void output(linklist head);
linklist Joseph(linklist head,int n,int m);
linklist Joseph(linklist head,int n,int m)
{
	if(head==NULL)
		return head;
	linklist p=head;
	for(int i=0;inext;
		}
		linklist del=p->next;
		printf("%-5d",del->data);
		p->next=del->next;
		free(del);
		del=NULL;
		p=p->next;
	}
	return NULL;
}
int main(int argc, const char *argv[])
{
	//定义头指针
	linklist head=NULL;
	int n;
	datatype element;
	printf("please enter n:");
	scanf("%d",&n);
	//循环写入
	for(int i=0;i

3、单向循环链表排序

#include 
#include 
#include 
enum{FALSE=-1,SUCCESS};
typedef int datatype;
typedef struct Node
{
	//数据域
	datatype data;
	//指针域
	struct Node *next;
}*linklist;
linklist creat();
linklist insert_rear(linklist head,datatype element);
void output(linklist head);
void sorting(linklist head);
//单链表排序
void sorting(linklist head)
{
	if(head==NULL)
		return;
	int len=length(head);
	for(int i=1;idata>p->next->data)
			{
				datatype t=p->data;
				p->data=p->next->data;
				p->next->data=t;
			}
			p=p->next;
		}
	}
}
int main(int argc, const char *argv[])
{
	//定义头指针
	linklist head=NULL;
	int n;
	datatype element;
	printf("please enter n:");
	scanf("%d",&n);
	//循环写入
	for(int i=0;i

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