当前位置: 首页 > article >正文

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

一、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;
}

四、执行结果

五、知识点思维导图


http://www.kler.cn/a/446766.html

相关文章:

  • C#中方法参数传值和传引用的情况
  • 用SparkSQL和PySpark完成按时间字段顺序将字符串字段中的值组合在一起分组显示
  • 常用es命令
  • Go 语言常量
  • wireshark初认识
  • 免费GIS工具箱:轻松将glb文件转换成3DTiles文件
  • 随记:springboot的xml中sql数据库表名动态写法
  • linux-----常用指令
  • HarmonyOS ArkTS中视频播放Video组件实现竖屏到横屏切换
  • Centos7安装k8s集群
  • kafka常用命令(持续更新)
  • Vivado安装System Generator不支持新版Matlab解决方法
  • 国标GB28181协议平台Liveweb:搭建建筑工地无线视频联网监控系统方案
  • 命令行音乐库管理工具Beets
  • HTML语法规范
  • 自动生成发票数据并存入Excel
  • 【大语言模型】ACL2024论文-28 TTM-RE: 增强记忆的文档级关系抽取
  • 你了解TCP/IP参考模型吗
  • 8086汇编(16位汇编)学习笔记00.DEBUG命令使用解析及范例大全
  • Qt开发经验 --- 避坑指南(2)
  • Ajax简单理解
  • raft: Failed to contact
  • 从零搭建纯前端飞机大战游戏(附源码)
  • Restaurants WebAPI(三)——Serilog/
  • 前端学习二
  • SQL血缘解析