4.17作业

#include "double_link_list.h"
node_p create_double_link_list()  //创建双向链表
{
	node_p H=(node_p)malloc(sizeof(node));
	if(H==NULL)
	{
		printf("空间申请失败\n");
		return NULL;
	}
	H->data=0;
	H->pri=NULL;
	H->next=NULL;
	return H;
}
node_p create_node(int data)  //创建双向链表的结点
{
	node_p new=(node_p)malloc(sizeof(node));
	if(new==NULL)
	{
		printf("创建结点失败\n");
		return NULL;
	}
	new->data=data;
	return new;
}
int empty_double_link_list(node_p H)  //判空
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return -1;
	}
	return H->pri==NULL && H->next==NULL?1:0;
}
void head_insert(node_p H,int data)  //头插
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	node_p new=create_node(data);
	if(H->next!=NULL)
	{
		new->next=H->next;
		H->next->pri=new;
	}
	new->pri=H;
	H->next=new;
	H->data++;
}
void head_delet(node_p H)  //头删
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(empty_double_link_list(H))
	{
		printf("链表为空,无需删除\n");
		return;
	}
	node_p del=H->next;
	if(del->next!=NULL)
	{
		del->next->pri=H;
		H->next=del->next;
	}
	else
		H->next=NULL;
	free(del);
	H->data--;
}
void show_double_link_list(node_p H)  //输出
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(empty_double_link_list(H))
	{
		printf("链表为空,无需输出\n");
		return;
	}
	node_p p=H;
	for(int i=0;i<H->data;i++)
	{
		p=p->next;
		printf("%-4d",p->data);
	}
	printf("NULL");
	putchar(10);
}
void tail_insert(node_p H,int data)  //尾插
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	node_p p=H;
	while(p->next!=NULL)
		p=p->next;
	node_p new=create_node(data);
	new->next=p->next;
	p->next=new;
	new->pri=p;
	H->data++;
}
void tail_delet(node_p H)  //尾删
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(empty_double_link_list(H))
	{
		printf("链表为空,无需删除\n");
		return;
	}
	node_p p=H;
	while(p->next->next!=NULL)
		p=p->next;
	node_p del=p->next;
	p->next=del->next;
	free(del);
	H->data--;
}
void pos_insert(node_p H,int pos,int data)  //按位置插入
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(pos<1 || pos>H->data+1)
	{
		printf("位置不合理,请重新输入\n");
		return;
	}
	node_p p=H;
	for(int i=0;i<pos-1;i++)
		p=p->next;
	node_p new=create_node(data);
	if(p->next!=NULL)
	{
		new->next=p->next;
		p->next->pri=new;
	}
	new->pri=p;
	p->next=new;
	H->data++;
}
void pos_delet(node_p H,int pos)  //按位置删除
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(empty_double_link_list(H))
	{
		printf("表为空,无需删除\n");
		return;
	}
	node_p p=H;
	for(int i=0;i<pos-1;i++)
		p=p->next;
	node_p del=p->next;
	if(p->next!=NULL)
		del->next->pri=p;
	p->next=del->next;
	free(del);
	H->data--;
}
void overturn_link(node_p H)   //单向链表的逆置
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	if(empty_link_list(H))
	{
		printf("链表为空,无需逆置\n");
		return;
	}
	if(H->next->next==NULL)
	{
		printf("链表只有一个元素,无需逆置\n");
		return;
	}
	node_p p=H->next->next;
	H->next->next=NULL;
	while(p!=NULL)
	{
		node_p q=p->next;
		p->next=H->next;
		H->next=p;
		p=q;
	}
}

链表和顺序表的区别:

顺序表的物理结构是顺序存储,在逻辑上连续,物理地址也连续,但会造成内存空间浪费。

链表的物理结构是链式存储,在逻辑上连续,物理地址不连续,单个结点创建和删除,不会造成内存空间浪费。

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

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

相关文章

照片jpg格式小于50kb怎么弄?jpg压缩到指定大小

我们经常需要处理大量的图片&#xff0c;特别是在分享到社交媒体时&#xff0c;然而&#xff0c;图片文件的大小常常成为困扰我们的问题&#xff0c;尤其是当我们的设备存储空间有限时。有些平台甚至会需要将图片压缩到50kb大小&#xff0c;那么&#xff0c;如何有效地压缩图片…

学习Rust的第4天:常见编程概念

基于Steve Klabnik的《The Rust Programming Language》一书。昨天我们做了一个猜谜游戏 &#xff0c;今天我们将探讨常见的编程概念&#xff0c;例如&#xff1a; Variables 变量Constants 常数Shadowing 阴影Data Types 数据类型Functions 功能 Variables 变量 In layman ter…

HackMyVM-suidy

目录 信息收集 arp nmap WEB web信息收集 gobuster 目录批量查看 hydra ssh连接 提权 系统信息收集 提权 信息收集 arp ┌─[rootparrot]─[~/HackMyVM] └──╼ #arp-scan -l Interface: enp0s3, type: EN10MB, MAC: 08:00:27:16:3d:f8, IPv4: 192.168.9.115 St…

【网络通信基础】网络中的常见基本概念

目录 一、IP地址 二、端口号 三、协议 四、五元组 五、协议分层 1. OSI 模型 2. TCP/CP五层&#xff08;或四层&#xff09;模型 3. 网络设备所在分层 六、封装和分用 封装&#xff08;Encapsulation&#xff09; 分用&#xff08;Multiplexing&#xff09; 一、IP…

多目标环形粒子群算法和多目标遗传算法跑MOCEC2020(24个多目标测试函数,matlab代码,多个评价指标)

本号从现在起可以定制使用评估次数改进单目标群体算法&#xff0c;需要的私&#xff0c;价格贵&#xff0c;质量高。 目录&#xff1a; 一、多目标环形粒子群算法MO_Ring_PSO_SCD 二、多目标遗传算法NSGAII 三、MOCEC2020的24个多目标测试函数 四、实验结果 五、代码获取…

C语言进阶课程学习记录-函数指针的阅读

C语言进阶课程学习记录-函数指针的阅读 5个标识符含义解析技巧 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 5个标识符含义解析 int (*p1) (int* , int (*f) ( int* ) );定义了指针p1,指向函数&#…

javaWeb智能医疗管理系统

简介 在当今快节奏的生活中&#xff0c;智能医疗系统的崛起为医疗行业带来了一场革命性的变革。基于JavaWeb技术开发的智能医疗管理系统&#xff0c;不仅为医疗机构提供了高效、精准的管理工具&#xff0c;也为患者提供了更便捷、更个性化的医疗服务。本文将介绍一个基于SSM&a…

树莓集团产业生态建设之特色产业服务:人才项目转化中心

树莓集团在产业生态建设中&#xff0c;积极输出特色产业服务——人才项目转化中心。该中心依托数字产业园致力于推动创新创业工作&#xff0c;通过链接产业人才聚集地与树莓认证的导师库体系&#xff0c;为人才及相关课题项目提供全方位的服务。 树莓集团人才项目转化中心以人…

Python学习(四)文件操作

文件操作 想想我们平常对文件的基本操作&#xff0c;大概可以分为三个步骤(简称文件操作三步走): ① 打开文件 ② 读写文件 ③ 关闭文件 注意:可以只打开和关闭文件&#xff0c;不进行任何读写 在Python&#xff0c;使用open函数&#xff0c;可以打开一个已经存在的文件&…

IP爬虫代理服务器是什么以及为什么使用爬虫代理?

在网络抓取领域&#xff0c;爬虫代理发挥着关键作用。 但它们到底是什么&#xff1f; 从本质上讲&#xff0c;爬虫代理是位于网络抓取工具和目标网站之间的中间服务器。 该中间服务器充当盾牌&#xff0c;提供匿名性&#xff0c;并允许您访问网站并提取数据&#xff0c;而无需透…

IDEA配置Maven环境

黑马程序员JavaWeb开发教程 文章目录 如果当前有已经打开项目的话&#xff0c;File -> Close Project 到以下页面之后选择 Customize -> All settings… 配置maven的安装目录&#xff0c;maven的配置文件&#xff0c;maven的本地仓库&#xff08;修改完成之后一定要先…

mybatis进阶篇-执行CRUD操作-typeAliases别名-接口绑定

目录结构 所需jar包 https://download.csdn.net/download/weixin_44201223/89160447?spm1003.2166.3001.6637.1 1.创建数据表&#xff08;book&#xff09; # 创建book表 create table book(id int auto_increment primary key,name varchar(255) ,price double ,num int )…

Linux OpenSSH最新版9.7p1升级操作详细教程

原创声明&#xff1a;非本人许可&#xff0c;谢绝转载&#xff01; 1.背景说明 前几天与朋友闲聊中得知他朋友圈有服务器因OpenSSH漏洞遭受攻击的事情&#xff0c;OpenSSH重要性这里就不废话了&#xff0c;在网上一查&#xff0c;公布的漏洞还真不少&#xff0c;其中还有不少…

RK3588平台开发系列讲解(PCIe开发篇2)

根据原理图填写DTS 原理图是基于IO信号的视⻆来描述硬件&#xff0c;IO信号是跟PHY的index强相关的&#xff0c;前⾯提到RK3588的controller和PHY的index可能不⼀致&#xff0c;所以看原理图的时候需要特别注意这⼀点。这⾥给出⼀些填写建议&#xff0c;并通过⽰例说明如何将原…

socket通信基础讲解及示例-C

socket通信之C篇 服务端与客户端简介 socket通信服务端与客户端通信模型通信实战server&#xff08;服务端&#xff09;创建client&#xff08;客户端&#xff09;创建 函数详解创建套接字 socket绑定端口bind进入监听状态listen获取客户端连接请求accept接收网络数据read发送数…

音素与视素(Viseme)

什么是视素&#xff08;视位&#xff09; 音素(Phoneme)&#xff0c;是人类语言中能够区别意义的最小声音单位。视素(Viseme)&#xff0c;是指与某一音素相对应的嘴、舌头、下腭等可视发音器官所处的状态。Viseme是MPEG-4 标准提出来的概念。 有时Viseme也翻译为视位。下面会…

JavaEE初阶Day 10:多线程(8)

目录 Day 10&#xff1a;多线程&#xff08;8&#xff09;单例模式阻塞队列1. 生产者消费者模型1.1 生产者消费者模型解耦合1.2 生产者消费者模型削峰填谷 2. 生产者消费者代码3. 阻塞队列实现 Day 10&#xff1a;多线程&#xff08;8&#xff09; 单例模式 单例模式&#xf…

springboot中mongodb连接池配置-源码分析

yml下spring.data.mongodb 以前mysql等在spring.xxx下配置&#xff0c;现在springboot新版本&#xff08;小编3.2.3&#xff09;在spring.data.xxx下了&#xff0c;如下所示&#xff0c;mongodb的配置在spring.data.mongodb下&#xff1a; 连接池相关参数配置-源码分析 拼接在…

vue3 删除对象中的属性,可以使用js里的delete,但需注意ts定义对象类型!

如上如&#xff0c;当使用delete 删除stateData中的属性时&#xff0c; 报错&#xff0c;意思为 TypeScript 错误“‘delete’ 运算符的操作数必须是可选的 什么原因呢&#xff1f;是因为我偷懒 缺少了ts定义类型 方法一&#xff1a; &#xff08;不推荐&#xff09; delete …

【网络安全 | 信息收集】JS文件信息收集工具LinkFinder安装使用教程

文章目录 前言安装教程使用教程 前言 JavaScript文件可能会泄露敏感信息&#xff0c;如注释中的机密信息、内部IP地址&#xff0c;以及包含未授权访问或其他漏洞的URL。手动检查这些信息效率低下&#xff0c;而该工具——LinkFinder&#xff0c;可用于自动收集JavaScript文件中…
最新文章