数据结构day5:单向循环链表 代码作业

发布于:2024-12-22 ⋅ 阅读:(59) ⋅ 点赞:(0)

一、loopLink.h

#ifndef __LOOPLINK_H__
#define __LOOPLINK_H__

#include <stdio.h>
#include <stdlib.h>

typedef int DataType;

typedef struct node
{
	union
	{
		int len;
		DataType data;
	};
	struct node* next;
}loopLink, *loopLinkPtr;

//创建
loopLinkPtr create();

//判空
int empty(loopLinkPtr H);

//尾插
int tail_add(loopLinkPtr H, DataType e);

//遍历
void show(loopLinkPtr H);

//尾删
int tail_del(loopLinkPtr H);

//销毁
void my_free(loopLinkPtr H);

#endif


二、loopLink.c

#include "loopLink.h"

//创建
loopLinkPtr create()
{
	loopLinkPtr H = (loopLinkPtr)malloc(sizeof(loopLink));
	if(NULL == H)
	{
		printf("创建失败!\n");
		return NULL;
	}
	H->len = 0;
	H->next = H;
	printf("创建成功!\n");
	return H;
}

//判空
int empty(loopLinkPtr H)
{
	if(NULL == H)
	{
		printf("判空失败!\n");
		return -1;
	}
	return H->len==0;
}

//尾插
int tail_add(loopLinkPtr H, DataType e)
{
	if(NULL == H)
	{
		printf("尾插失败!\n");
		return 0;
	}

	loopLinkPtr p = (loopLinkPtr)malloc(sizeof(loopLink));
	if(NULL == p)
	{
		printf("申请节点失败!\n");
		return 0;
	}
	p->data = e;
	p->next = NULL;
	
	loopLinkPtr q = H;
	while(q->next != H)
	{
		q = q->next;
	}
	
	q->next = p;
	p->next = H;

	H->len++;
	return 1;
}

//遍历
void show(loopLinkPtr H)
{
	if(NULL == H || empty(H))
	{
		printf("遍历失败!\n");
		return ;
	}
	
	loopLinkPtr p = H;
	for(int i=0; i<H->len; i++)
	{
		p = p->next;
		printf("%d ", p->data);
	}
	printf("\n");
}

//尾删
int tail_del(loopLinkPtr H)
{
	if(NULL == H || empty(H))
	{
		printf("删除失败!\n");
		return 0;
	}
	loopLinkPtr q = H;
	for(int i=0; i<H->len-1; i++)
	{
		q = q->next;
	}
	free(q->next);
	q->next = H;
	
	H->len--;
	return 1;
}

//销毁
void my_free(loopLinkPtr H)
{
	if(NULL == H)
	{
		printf("销毁失败!\n");
		return ;
	}
	while(H->next != H)
	{
		tail_del(H);
	}
	free(H);
	H=NULL;
	printf("销毁成功!\n");
}


三、main.c

#include "loopLink.h"

int main()
{
	loopLinkPtr H = create();
	tail_add(H, 10);
	tail_add(H, 20);
	tail_add(H, 30);
	tail_add(H, 40);
	tail_add(H, 50);
	show(H);
	//尾删
	tail_del(H);
	show(H);
	//销毁
	my_free(H);
	H=NULL;

	return 0;
}

四、执行结果

五、知识点思维导图


网站公告

今日签到

点亮在社区的每一天
去签到

热门文章