2024.3.15

news2025/1/11 17:43:59

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.思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AJAX概念和axios使用、URL、请求方法和数据提交、HTTP协议、接口、form-serialize插件

AJAX概念和axios使用 AJAX概念 AJAX就是使用XMLHttpRequest对象与服务器通信&#xff0c;它可以使用JSON、XML、HTML和text文本等格式发送和接收数据&#xff0c;AJAX最吸引人的就是它的异步特性&#xff0c;也就是说它可以在不重新刷新页面的情况下与服务器通信&#xff0c;…

2024全国水科技大会-协办单位:海南立昇净水科技实业有限公司

海南立昇净水科技实业有限公司 集膜技术研发、生产和销售服务于一体的集团型高科技企业。30年来一直专注于“膜”技术研发&#xff0c;始终坚持走自主科技创新之路。在国内构建起由26家直属分公司和超过500家经销代理商组成的营销服务网络&#xff0c;立昇净水设备被广泛应用于…

前端学习之css伪元素选择器

伪元素选择器 &#xff08;注释是对各个内容的解释与理解&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>伪元素选择器</title><!-- 双冒号开头一般都称为伪元素&#xff0c;…

STL容器之list类

文章目录 STL容器之list类1、list的介绍2、list的使用2.1、list的常见构造2.2、list的iterator的使用2.3、list空间增长问题2.4、list的增删查改2.5、list迭代器失效问题 3、list的模拟实现&#xff08;含反向迭代器&#xff09; STL容器之list类 1、list的介绍 list是序列容器…

C++初阶:1_C++入门

C入门 零.本节知识点安排目的 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等。熟悉C语言之后&#xff0c;对C学习有一定的帮助&#xff0c;本章节主要目标&#xff1a; 补充C语言语法的不足&#xff0…

【S5PV210_视频编解码项目】裸机开发:实现按键的外部中断处理

加粗样式本文所作内容&#xff1a; 基于S5PV210芯片实现按键的外部中断处理程序&#xff0c;搭建中断处理流程框架 S5PV210对于中断处理的操作流程 1 外部中断得到触发&#xff1a; 1&#xff09;外部中断在初始化阶段得到使能 2&#xff09;外界达到了外部中断的触发条件 …

Spring注解方式整合三层架构

注解方式特点 1. 完全注解方式指的是去掉xml文件&#xff0c;使用配置类 注解实现 2. xml文件替换成使用Configuration注解标记的类 3. 标记IoC注解&#xff1a;Component,Service,Controller,Repository 4. 标记DI注解&#xff1a;Autowired Qualifier Resource Value 5. &…

html--简历

文章目录 html html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"maximum-scale1.0,minimum-scale1.0,user-scalable0,widthdevice-width,initial-scale1.0&qu…

SqlServer2008(R2)(二)SqlServer2008(R2)安装和卸载注意事项整理

二、注意事项 1、 安装数据中心版 说明&#xff1a;此激活版仅用于测试和学习使用。 这是官方的下载页面&#xff08;需要付费订阅&#xff09;&#xff1a; http://msdn.microsoft.com/zh-cn/subscriptions/downloads/default.aspx 数据中心版&#xff1a; PTTFM-X467G-P7RH…

在Windows系统上搭建MongoDB-这篇文章刚刚好

在Windows系统上搭建MongoDB集群 文章目录 1.下载MongoDB2.集群描述3.构建集群文件目录4.新建配置文件5.启动MongoDB服务6.配置集群7.集群测试8.设置密码和开启认证一、安装MongoDB 1.下载MongoDB 去MongoDB官网下载解压版免安装的压缩包。 https://www.mongodb.com/try/do…

金枪鱼群优化算法TSO优化BiLSTM-ATTENTION实现风力发电功率预测(matlab)

金枪鱼群优化算法TSO优化BiLSTM-ATTENTION实现风力发电功率预测&#xff08;matlab&#xff09; TSO-BiLSTM-Attention金枪鱼群算法优化长短期记忆神经网络结合注意力机制的数据回归预测 Matlab语言。 金枪鱼群优化算法&#xff08;Tuna Swarm Optimization&#xff0c;TSO)是一…

一种动态联动的实现方法

安防领域中的联动规则 有安防领域相关的开发经历的人知道&#xff0c;IPCamera可以配置使能“侦测”功能&#xff0c;并且指定仅针对图像传感器的某个区载进行侦测。除了基本的“移动侦测"外&#xff0c;侦测的功能点还有细化的类别&#xff0c;如人员侦测、车辆侦测、烟…

python之前端css样式(一)

css ID选择器 #c1{color:red;#边框为红色border:1px solid red; } <div id"c2">中国移动</div> 类选择器 .xx{color:blue; } <div class"xx">中国联通</div> 标签选择器 li{color: pink; } <ul><li>北京</li…

C++作业day4

成员函数版本实现算术运算符的重载 全局函数版本实现算术运算符的重载 #include <iostream>using namespace std;class Person {friend const Person operator-(const Person &L,const Person &R); private:int a;int b; public:Person() {}Person(int a,int …

网康科技 NS-ASG 应用安全网关 SQL注入漏洞复现(CVE-2024-2330)

0x01 产品简介 网康科技的NS-ASG应用安全网关是一款软硬件一体化的产品,集成了SSL和IPSec,旨在保障业务访问的安全性,适配所有移动终端,提供多种链路均衡和选择技术,支持多种认证方式灵活组合,以及内置短信认证、LDAP令牌、USB KEY等多达13种认证方式。 0x02 漏洞概述 …

深入浅出ConcurrentHashMap

ConcurrentHashMap 由于HashMap在多线程的环境下有线程安全的问题&#xff0c;并且HashTable的性能低下&#xff0c;所以Java推出了ConcurrentHashMap&#xff0c;因此ConcurrentHashMap可以理解为线程安全并且性能较好的HashMap。 HashTable为什么慢&#xff1f;是因为使用了…

同步和异步程序的关联和区别是?Guide to Synchronous and Asynchronous Code

2024/3/12 发布 正在寻觅一份前端开发工作&#xff0c;如果您觉得这篇文章对你有所帮助&#xff0c;这是我的简历1 在这篇文章中你能学习和理解&#xff1a;NodeJS是如何工作、如何处理所有发送给服务器的函数&#xff08;无论同步或者异步&#xff09;和请求、Event Loops in …

Apache-Doris基础概念

OLAP数据库Doris 一、Doris架构二、基本概念1. Row & Column2. Partition & Tablet3. 建表示例&#xff08;1&#xff09;列的定义&#xff08;2&#xff09;分区分桶&#xff08;3&#xff09;多列分区&#xff08;4&#xff09;PROPERTIES&#xff08;5&#xff09;E…

Java 面试题之框架

1. Spring 是什么 Sping 是包含了众多工具方法的 IOC 容器&#xff0c;IOC是控制反转&#xff0c;说的是对象的创建和销毁的权利都交给 Spring 来管理了, 它本身又具备了存储对象和获取对象的能力. 。 容器&#xff1a;字面意思&#xff0c;用来容纳某种物品的装置。 比如 L…

通俗易懂的Python循环讲解

循环用于重复执行一些程序块。从上一讲的选择结构&#xff0c;我们已经看到了如何用缩进来表示程序块的隶属关系。循环也会用到类似的写法。 for循环 for循环需要预先设定好循环的次数(n)&#xff0c;然后执行隶属于for的语句n次。 基本构造是 for 元素 in 序列: statemen…