2024.3.15

1.单向循环链表

代码:

#include"loop.h"
//创建单向循环链表
loop_p create_loop_list()
{
	loop_p H = (loop_p)malloc(sizeof(loop));
	if(H==NULL)
	{
		printf("空间申请失败\n");
		return NULL;
	}
	H->len=0;
	H->next=H;
	return H;
}
//创建节点
loop_p create_loop(datatype data)
{
	loop_p new = (loop_p)malloc(sizeof(loop));
	if(new==NULL)
	{
		printf("空间申请失败\n");
		return NULL;
	}
	new->data=data;
	return new;
}
//判空
int empyt_loop(loop_p H)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return -1;
	}
	return H->next==H?1:0;
}
//输出
void show_loop(loop_p H)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(empyt_loop(H))
	{
		printf("链表为空\n");
		return;
	}
	loop_p p = H->next;
	while(p!=H)
	{
		printf("%d->",p->data);
		p=p->next;
	}
	printf("NULL\n");
}
//头插
void insert_head(loop_p H,datatype data)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	loop_p new = create_loop(data);
	new->next=H->next;
	H->next=new;
	H->len++;
}
//头删
void dele_head(loop_p H)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(empyt_loop(H))
	{
		printf("链表为空,无需删除\n");
		return;
	}
	loop_p del = H->next;
	H->next = del->next;
	free(del);
	H->len--;
}
//尾插
void insert_tail(loop_p H,datatype data)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	loop_p p = H->next;
	while(p->next!=H)
	{
		p=p->next;
	}
	loop_p new = create_loop(data);
	new->next=p->next;
	p->next=new;
	H->len++;
}
//尾删
void dele_tail(loop_p H)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(empyt_loop(H))
	{
		printf("链表为空,无需删除\n");
		return;
	}
	loop_p p = H;
	while(p->next->next!=H)
	{
		p=p->next;
	}
	loop_p del = p->next;
	p->next H;
	free(del);
	H->len--;
}
//按位置插入
void insert_pos(loop_p H,datatype data,int pos)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(pos<1||pos>H->len+1)
	{
		printf("位置不合理\n");
		return;
	}
	loop_p p = H->next;
	loop_p new = create_loop(data);
	for(int i=1;i<pos-1;i++)
	{
		p=p->next;
	}
	new->next = p->next;
	p->next = new;
	H->len++;
}
//按位置删除
void dele_pos(loop_p H,int pos)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(empyt_loop(H))
	{
		printf("链表为空,无需删除\n");
		return;
	}
	if(pos<1||pos>H->len)
	{
		printf("位置不合理\n");
		return;
	}
	loop_p p = H->next;
	for(int i=1;i<pos;i++)
	{
		p=p->next;
	}
	loop_p del = p->next;
	p->next = del->next;
	free(del);
	H->len--;
}
//删除单向循环列表的头结点
void dele_head_loop(loop_p H)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	loop_p p = H->next;
	while(p->next!=H)
	{
		p=p->next;
	}
	p->next=H->next;
	free(H);
	return p->next;
}
//打印输出没有头的单向循环链表
void show_nohead_loop(loop_p fir)
{
	if(fir==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	loop_p p = fir;
	do
	{	
		printf("%d->",p->data);
		p=p->next;
	}
	while(p!=fir);
	
}

2.双向链表

代码:

#include"double.h"
//创建双向链表
double_p create_double()
{
    double_p H = (double_p)malloc(sizeof(node));
    if(H==NULL)
    {
        printf("空间申请失败\n");
        return NULL;
    }
    H->len = 0;
    H->pri = NULL;
    H->next = NULL;
    return H;
}
//创建节点
double_p create_node(datatype data)
{
    double_p new = (double_p)malloc(sizeof(node));
    if(H==NULL)
    {
        printf("空间申请失败\n");
        return NULL;
    }
    new->data = data;
    return new;
}
//头插
void insert_head(double_p H,datatype data)
{
    if(H==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    double_p new = create_node(data);
    new->next = H->next;
    if(H->next!=NULL)
    {
        H->next->pri = new;
    }
    H->next = new;
    new->pri = H;
    H->len++;
}
//判空
int empty_double(double_p H)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return -1;
	}
	return H->next==NULL?1:0;
}
//输出
void show_double(double_p H)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(empty_double(H))
	{
		printf("链表为空\n");
		return;
	}
	double_p p = H->next;
	while(p!=NULL)
	{
		printf("%d->",p->data);
		p=p->next;
	}
	printf("NULL\n");
}
//头删
void dele_head(double_p H)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(empty_double(H))
	{
		printf("链表为空,无需删除\n");
		return;
	}
	double_p del = H->next;
	H->next = del->next;
	del->next->pri = H;
	free(del);
	H->len--;
}
//尾插
void insert_tail(double_p H,datatype data)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	double_p new = create_node(data);
	double_p p = H;
	while(p->next!=NULL)
	{
		p=p->next;
	}
	p->next = new;
	new->pri = p;
	new->next = NULL;
	H->len++;
}
//按位置插入*
void insert_pos(double_p H,datatype data,int pos)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	double_p new = create_node(data);
	double_p p = H->next;
	for(int i=0;i<pos-1;i++)
	{
		p=p->next;
	}
	new->next = p->next;
	if(p->next!=NULL)
	{
		p->next->pri=new;
	}
	p->next=new;
	new->pri=p;
	H->len++;
}
//按位置删除
void dele_pos(double_p H,int pos)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(empty_double(H))
	{
		printf("链表为空,无需删除\n");
		return;
	}
	if(pos<0||pos>H->len)
	{
		printf("位置不合理\n");
		return;
	}
	double_p p = H->next;
	for(int i=1;i<pos-1;i++)
	{
		p=p->next;
	}
	double_p del = p->next;
	p->next = del->next;
	del->next->pri = p;
	free(del);
	H->len--;

}

结果:

3.思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/464636.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【晴问算法】入门篇—贪心算法—整数配对

题目描述 有两个正整数集合S、T&#xff0c;其中S中有n个正整数&#xff0c;T中有m个正整数。定义一次配对操作为&#xff1a;从两个集合中各取出一个数a和b&#xff0c;满足a∈S、b∈T、a≤b&#xff0c;配对的数不能再放回集合。问最多可以进行多少次这样的配对操作。 输入描…

C语言数据类型 ---变量的定义

目录 关键字&#xff08;Keywords&#xff09; 标识符&#xff08;Identifiers&#xff09; *命名规则 *常量&#xff08;Constant&#xff09; *变量&#xff08;Variable&#xff09; 变量的定义 小结 变量的4个基本属性 程序设计语言的基本构成要素 自然语言程序设…

【Godot4.0】自定义A*寻路拓展类TileMapAStar2D及其使用

概述 Godot提供的AStar2D和AStarGrid2D基本可以解决所有2D的A*寻路问题&#xff1a; 前者提供了基础的A*寻路支持&#xff0c;但是需要手动处理很多内容后者针对基于方形图块的A*寻路&#xff0c;进行了很多自动化的工作&#xff0c;用起来十分简便。但是不使用于六边形、iso…

人人站CMS后台登不进去解决方案(已解决)

公司有一个网站使用的是人人站CMS&#xff0c;最近发现后台登录不进去&#xff0c;有以下报错 发生以下错误: file get contents(http://www.rrzcms.com/Public/cms/config/config.ison): failed to open stream: HTTP reguest failed! 请求的URL导致内部服务器错误。 如果您反…

3.4 bp,si,di寄存器,寻址方式,寄存器总结

汇编语言 1. [bxidata] 我们可以用[bx]来指明一个内存单元我们也可以用[bxidata]来表示一个内存单元&#xff0c;它的偏移地址为bx中的数值加上idata mount c d:masm c: debug r d 2000:1000 e 2000:1000 12 34 56 78 a mov ax,2000 mov ds,ax mov bx,1000 mov ax,[bx] mov c…

如何创建用户流(User Flow):分步指南

原文作者&#xff1a;Camren Browne&#xff0c;CareerFoundry 翻译&#xff1a;数字营销工兵 (sources: 图片来源于网络&#xff09; 用户流(User Flow)是当今用户体验行业中最有用但被误解的工具之一。资深设计师经常避开它们&#xff0c;而初级设计师则很难抓住它们。 事…

代码算法训练营day7 | 454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和

day7: 剩下的两题&#xff1a; 15. 三数之和18. 四数之和 15. 三数之和 题目链接 状态&#xff1a; 文档&#xff1a;programmercarl.com 注意&#xff1a; 这和第一题中的四数相加Ⅱ很像&#xff0c;如果用哈希算法的思路就是&#xff1a; 两层for循环就可以确定 a 和b 的数值…

C++面向对象程序设计 - 创建学生类

在20世纪80年代提出了面向对象的程序设计&#xff08;Object oriented programming, OOP&#xff09;思想&#xff0c;在此形势下&#xff0c;C由AT&TBell&#xff08;贝尔&#xff09;实验室于20世纪80年代初在C语言的基础上开发成功&#xff0c;C保留了C语言原有的所有优…

(C语言)整数在内存中的存储与大小端

1. 整数在内存中的存储 整数的2进制表示方法有三种 &#xff0c;即 原码、反码和补码 有符号类型数据三种表示方法均有符号位和数值位两部分 &#xff0c;符号位都是用0表示“正” &#xff0c;用1表示“负” &#xff0c;最高位的一位是被当做符号位 &#xff0c;剩余的都是…

智慧公厕建设的主要目标是什么?

随着城市化进程的不断推进&#xff0c;公共厕所作为城市基础设施的重要组成部分&#xff0c;也变得越来越重要。为了提升公共厕所的管理水平、提供更好的服务质量&#xff0c;智慧公厕应运而生。智慧公厕的建设旨在通过信息化手段实现公共厕所的全面感知监测&#xff0c;实现公…

VGG论文学习笔记

题目&#xff1a;VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION 论文下载地址&#xff1a;VGG论文 摘要 目的&#xff1a;研究深度对精度的影响 方法&#xff1a;使用3*3滤波器不断增加深度&#xff0c;16和19效果显著 成绩&#xff1a;在ImageNet 20…

C++ 智能指针的使用

智能指针类型 在C程序中&#xff0c;普通变量使用栈内存&#xff0c;为函数运行时专用&#xff0c;结束后会自动释放&#xff0c;无须考虑内存释放问题。 但堆内存是共用的&#xff0c;其使用是通过指针变量的new来分配&#xff0c;使用delete来释放&#xff0c;因指针使用方便…

AI预测-一文解析AI预测数据工程

AI预测相关目录 AI预测流程&#xff0c;包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

Flink程序员开发利器本地化WebUI生成

前言 在flink程序开发或者调试过程中&#xff0c;每次部署到集群上都需要不断打包部署&#xff0c;其实是比较麻烦的事情&#xff0c;其实flink一直就提供了一种比较好的方式使得开发同学不用部署就可以观察到flink执行情况。 上代码 第一步&#xff1a;开发之前需要引入在本…

中间件漏洞(redis)

目录 1.Redis服务器被挖矿案例 2.redis常见用途 3.redis环境配置 4.redis的持久化机制 5.redis动态修改配置 6.webshell提权案例 7.定时任务bash反弹连接提权案例 8.SSH Key提权案例 9.redis安全加固分析 1.Redis服务器被挖矿案例 我没有体验过&#xff0c;那就看看别…

Flutter:构建美观应用的跨平台方案

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【Fitten Code】“吊打“Github Copilot的国内免费代码辅助插件

&#x1f33b;个人主页&#xff1a;相洋同学 &#x1f947;学习在于行动、总结和坚持&#xff0c;共勉&#xff01; 目录 1.Github Copilot 2.Fitten Code 2.1 对话体验&#xff1a; 2.2 代码补全体验&#xff1a; 2.3 Pycharm安装方法&#xff1a; 2.4 Vscode安装方法…

git基础命令(一)

目录 基础概念git statusgit addgit diffgit loggit commit文件可以处于以下三种状态之一远程存储库与本地存储库参考 用于知识记录。后续有新的的内容&#xff0c;例子&#xff0c;将持续更新本文档。 基础概念 工作树&#xff1a;git add 之前&#xff0c;变动内容的文件列表…

Linux课程_____用户的管理

一、规则 用户至少属于一个组,在创建时如果不指定组,将会创建同名的组 用户只能有一个基本组(主组),但可以隶属于多个附加组 如果一个组作为某用户的基本组,此组将不能被删除 UID: 用户标识 GID: 组的标识 root管理员的uid及gid 都为0 二、用户的配置文件 1./etc/passwd …

<c语言学习> 整数和浮点数的存储方式

1.整数 有符号整数 第一位为符号位 1代表负数 0代表正数 举例&#xff1a; signed char 8 ---------------------> 0000 1000 -8 ----------------------> 1111 1000 &#xff08;补码形式存储&#xff09; 补码存储&#xff08;计算&#xff09;的妙处&…