day5,数据结构,单向,双向,循环链表

1】思维导图

2】完成单向循环链表的所有操作 【创建、判空、尾插、遍历、尾删、销毁】

创建:

LooplinkPtr caerte()
{
	LooplinkPtr h=(LooplinkPtr)malloc(sizeof(Looplink));
	if(NULL==h)
	{
		printf("创建失败\n");
		return NULL;
	}
	h->len=0;
	h->data=0;
	h->next=h;
	printf("创建成功\n");
	return h;
}

判空:

int empt(LooplinkPtr h)
{
	if(NULL==h)
	{
		printf("判空失败\n");
		return -1;
	}
	return h->next==h;
}

尾插:

void Tail_Add(LooplinkPtr h,DataType a)
{
	if(NULL==h)
	{
		printf("尾插失败\n");
		return ;
	}
	LooplinkPtr p=node_caerte(a);
	LooplinkPtr p1=h;
	while(p1->next!=h)
	{
		p1=p1->next;
	}
	p1->next=p;
	p->next=h;
	h->len++;
	return;
}

 遍历:

void show(LooplinkPtr h)
{
	if(NULL==h||empt(h))
	{
		printf("打印失败\n");
		return ;
	}
	LooplinkPtr p=h;
	while(p->next!=h)
	{
		p=p->next;
		printf("%d->",p->data);
	}

	putchar(10);
	return ;
}

 尾删:

void Tail_Del(LooplinkPtr h)
{
	if(NULL==h||empt(h))
	{
		printf("尾删失败\n");
		return ;
	}
	LooplinkPtr p=h;
	for(int i=0;i<h->len-1;i++)
	{
		p=p->next;
	}
	LooplinkPtr temp=p->next;
	p->next=h;
	h->len--;
	free(temp);
	temp=NULL;
	return ;
}

销毁:

void My_free(LooplinkPtr h)
{
	if(NULL==h||empt(h))
	{
		printf("销毁失败\n");
		return ;
	}
	for(int i=0;i<h->len;i++)
	{
		Tail_Del(h);
	}
	free(h);
	printf("销毁成功\n");
	return ;
}

运行截图:

 

源码:

#include"Looplink.h"

LooplinkPtr caerte()
{
	LooplinkPtr h=(LooplinkPtr)malloc(sizeof(Looplink));
	if(NULL==h)
	{
		printf("创建失败\n");
		return NULL;
	}
	h->len=0;
	h->data=0;
	h->next=h;
	printf("创建成功\n");
	return h;
}

int empt(LooplinkPtr h)
{
	if(NULL==h)
	{
		printf("判空失败\n");
		return -1;
	}
	return h->next==h;
}

LooplinkPtr node_caerte(DataType a)
{
	LooplinkPtr p=(LooplinkPtr)malloc(sizeof(Looplink));
	if(NULL==p)
	{
		printf("创建失败\n");
		return NULL;
	}
	p->data=a;
	return p;
}

void Tail_Add(LooplinkPtr h,DataType a)
{
	if(NULL==h)
	{
		printf("尾插失败\n");
		return ;
	}
	LooplinkPtr p=node_caerte(a);
	LooplinkPtr p1=h;
	while(p1->next!=h)
	{
		p1=p1->next;
	}
	p1->next=p;
	p->next=h;
	h->len++;
	return;
}

void show(LooplinkPtr h)
{
	if(NULL==h||empt(h))
	{
		printf("打印失败\n");
		return ;
	}
	LooplinkPtr p=h;
	while(p->next!=h)
	{
		p=p->next;
		printf("%d->",p->data);
	}

	putchar(10);
	return ;
}

void Tail_Del(LooplinkPtr h)
{
	if(NULL==h||empt(h))
	{
		printf("尾删失败\n");
		return ;
	}
	LooplinkPtr p=h;
	for(int i=0;i<h->len-1;i++)
	{
		p=p->next;
	}
	LooplinkPtr temp=p->next;
	p->next=h;
	h->len--;
	free(temp);
	temp=NULL;
	return ;
}

void My_free(LooplinkPtr h)
{
	if(NULL==h||empt(h))
	{
		printf("销毁失败\n");
		return ;
	}
	for(int i=0;i<h->len;i++)
	{
		Tail_Del(h);
	}
	free(h);
	printf("销毁成功\n");
	return ;
}

3】完成双向循环链表的所有操作 【创建、判空、尾插、遍历、尾删、销毁】(与单向循环链表相似)

创建:

Loop_double_linkPtr caerte()
{
	Loop_double_linkPtr h=(Loop_double_linkPtr)malloc(sizeof(Loop_double_link));
	if(NULL==h)
	{
		printf("创建失败\n");
		return NULL;
	}
	h->len=0;
	h->data=0;
	h->next=h;
	h->proir=h;
	printf("创建成功\n");
	return h;
}

判空:

int empt(Loop_double_linkPtr h)
{
	if(NULL==h)
	{
		printf("判空失败\n");
		return -1;
	}
	return h->next==h;
}

 尾插:

void Tail_Add(Loop_double_linkPtr h,DataType a)
{
	if(NULL==h)
	{
		printf("尾插失败\n");
		return ;
	}
	Loop_double_linkPtr p=node_caerte(a);
	Loop_double_linkPtr p1=h;
	while(p1->next!=h)
	{
		p1=p1->next;
	}
	p->next=h;
	p->proir=p1;
	h->proir=p;
	p1->next=p;
	h->len++;
	return;
}

遍历:

void show(Loop_double_linkPtr h)
{
	if(NULL==h||empt(h))
	{
		printf("打印失败\n");
		return ;
	}
	Loop_double_linkPtr p=h;
	while(p->next!=h)
	{
		p=p->next;
		printf("%d->",p->data);
	}

	putchar(10);
	return ;
}

 尾删:

void Tail_Del(Loop_double_linkPtr h)
{
	if(NULL==h||empt(h))
	{
		printf("尾删失败\n");
		return ;
	}
	Loop_double_linkPtr p=h;
	for(int i=0;i<h->len-1;i++)
	{
		p=p->next;
	}
	Loop_double_linkPtr temp=p->next;
	p->next=h;
	h->proir=p;
	h->len--;
	free(temp);
	temp=NULL;
	return ;
}

销毁:

void My_free(Loop_double_linkPtr h)
{
	if(NULL==h||empt(h))
	{
		printf("销毁失败\n");
		return ;
	}
	for(int i=0;i<h->len;i++)
	{
		Tail_Del(h);
	}
	free(h);
	printf("销毁成功\n");
	return ;
}

运行截图:

附源码:

#include"Loopdoublelink.h"

Loop_double_linkPtr caerte()
{
	Loop_double_linkPtr h=(Loop_double_linkPtr)malloc(sizeof(Loop_double_link));
	if(NULL==h)
	{
		printf("创建失败\n");
		return NULL;
	}
	h->len=0;
	h->data=0;
	h->next=h;
	h->proir=h;
	printf("创建成功\n");
	return h;
}

int empt(Loop_double_linkPtr h)
{
	if(NULL==h)
	{
		printf("判空失败\n");
		return -1;
	}
	return h->next==h;
}

Loop_double_linkPtr node_caerte(DataType a)
{
	Loop_double_linkPtr p=(Loop_double_linkPtr)malloc(sizeof(Loop_double_link));
	if(NULL==p)
	{
		printf("创建失败\n");
		return NULL;
	}
	p->data=a;
	p->next=NULL;
	p->proir=NULL;
	return p;
}

void Tail_Add(Loop_double_linkPtr h,DataType a)
{
	if(NULL==h)
	{
		printf("尾插失败\n");
		return ;
	}
	Loop_double_linkPtr p=node_caerte(a);
	Loop_double_linkPtr p1=h;
	while(p1->next!=h)
	{
		p1=p1->next;
	}
	p->next=h;
	p->proir=p1;
	h->proir=p;
	p1->next=p;
	h->len++;
	return;
}

void show(Loop_double_linkPtr h)
{
	if(NULL==h||empt(h))
	{
		printf("打印失败\n");
		return ;
	}
	Loop_double_linkPtr p=h;
	while(p->next!=h)
	{
		p=p->next;
		printf("%d->",p->data);
	}

	putchar(10);
	return ;
}

void Tail_Del(Loop_double_linkPtr h)
{
	if(NULL==h||empt(h))
	{
		printf("尾删失败\n");
		return ;
	}
	Loop_double_linkPtr p=h;
	for(int i=0;i<h->len-1;i++)
	{
		p=p->next;
	}
	Loop_double_linkPtr temp=p->next;
	p->next=h;
	h->proir=p;
	h->len--;
	free(temp);
	temp=NULL;
	return ;
}

void My_free(Loop_double_linkPtr h)
{
	if(NULL==h||empt(h))
	{
		printf("销毁失败\n");
		return ;
	}
	for(int i=0;i<h->len;i++)
	{
		Tail_Del(h);
	}
	free(h);
	printf("销毁成功\n");
	return ;
}

上一篇:大模型日报 2024-12-19