寒假作业:2024/2/3

news2024/11/17 9:29:53

作业1:编程实现单向循环链表的头插、头删、尾插、尾删

1.头插:

代码:

#include "head.h"
/*
 * function:    单向循环链表新节点创建
 * @param [ in] 
 * @param [out] 
 * @return      成功返回创建的节点,失败NULL
 */
loop_linklist create()
{
	//堆区申请内存创建新节点
	loop_linklist s=(loop_linklist)malloc(sizeof(struct Node));
	//失败返回NULL
	if(NULL==s)
		return NULL;
	//成功则初始化并返回节点
	s->data=0;
	s->next=s;
	return s;
}
/*
 * function:    头插
 * @param [ in] 
 * @param [out] 头,插入的值
 * @return      头
 */
loop_linklist inster_head(loop_linklist head,datatype element)
{
	//创建新节点
	loop_linklist s=create();
	s->data=element;
	//链表为空
	if(NULL==head){
		head=s;
	}else{//链表不为空
		loop_linklist p=head;
		while(p->next!=head)
		{
			p=p->next;
		}
		s->next=head;
		head=s;
		p->next=head;
	}
	return head;
}

效果图:

2.头删:

代码:

/*
 * function:    头删
 * @param [ in] 
 * @param [out] 头
 * @return      头
 */
loop_linklist delete_head(loop_linklist head)
{
	//链表为空
	if(NULL==head)
		return head;
	//链表不为空
	//先找到最后一个节点
	loop_linklist p=head->next;
	while(p->next!=head)
	{
		p=p->next;
	}
	//开始头插
	loop_linklist del=head;
	head=head->next;
	free(del);
	del=NULL;
	p->next=head;
	return head;
}

效果图:

3.尾插:

代码:

/*
 * function:    尾插
 * @param [ in] 
 * @param [out] 头,插入的值
 * @return      头
 */
loop_linklist inster_rear(loop_linklist head,datatype element)
{
	//创建新节点
	loop_linklist s=create();
	s->data=element;
	//如果链表为空
	if(NULL==head){
		head=s;
	}else{//链表不为空
		//先循环到最后一个节点
		loop_linklist p=head;
		while(p->next!=head)
		{
			p=p->next;
		}
		//再尾插
		p->next=s;
		s->next=head;
	}
	return head;
}

效果图:

4.尾删:

代码:

/*
 * function:    尾删
 * @param [ in] 
 * @param [out] 头
 * @return      头
 */
loop_linklist delete_rear(loop_linklist head)
{
	//如果链表为空
	if(NULL==head)
		return head;
	//链表不为空
	//只有一个节点
	if(head->next==head){
		free(head);
		head=NULL;
	}else{//有多个节点
		loop_linklist del=head;
		while(del->next->next!=head)
		{
			del=del->next;
		}
		free(del->next);
		del->next=head;
	}
	return head;
}

效果图:

作业2:编程实现单向循环链表约瑟夫环

代码:

/*
 * function:    约瑟夫环
 * @param [ in] 
 * @param [out] 头,m
 * @return      NULL
 */
loop_linklist joseph(loop_linklist head,int n,int m)
{
	//如果链表为空
	if(NULL==head)
		return head;
	//链表不为空
	loop_linklist p=head;
	for(int i=0;i<n;i++)//外层控制出圈的轮数
	{
		for(int j=0;j<m-2;j++)//内层控制每轮要出圈的人
		{
			p=p->next;
		}
		//删除p的后继
		loop_linklist del=p->next;
		printf("%-4d",del->data);
		p->next=del->next;
		free(del);
		del=NULL;
		p=p->next;
	}
	puts("");
	return NULL;
}

效果图:

作业3:编程实现单向循环链表的排序

代码:

/*
 * function:    简单选择排序
 * @param [ in] 
 * @param [out] 头
 * @return      无
 */
void Simple(loop_linklist head)
{
	//如果链表为空
	if(NULL==head)
		return;
	//链表不为空
	for(loop_linklist i=head;i->next!=head;i=i->next)
	{
		loop_linklist min=i;
		for(loop_linklist j=i->next;j!=head;j=j->next)
		{
			if(min->data>j->data)
			{
				min=j;
			}
		}
		if(min!=i)
		{
			datatype t=min->data;
			min->data=i->data;
			i->data=t;
		}
	}
}

效果图:

总代码:

head.h:
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//数据域元素类型重定义
typedef int datatype;
//单向循环链表结构体的类型重定义
typedef struct Node
{
	//数据域
	datatype data;
	//指针域
	struct Node *next;
}*loop_linklist;

loop_linklist create();
loop_linklist inster_head(loop_linklist head,datatype element);
loop_linklist delete_head(loop_linklist head);
loop_linklist inster_rear(loop_linklist head,datatype element);
loop_linklist delete_rear(loop_linklist head);
loop_linklist joseph(loop_linklist head,int n,int m);
void Simple(loop_linklist head);
void output(loop_linklist head);

#endif
main.c:
#include "head.h"

int main(int argc, const char *argv[])
{
	loop_linklist head=NULL;
	int n;
	printf("please enter n:");
	scanf("%d",&n);
	datatype element;
	for(int i=0;i<n;i++)
	{
		printf("please enter %d element:",i+1);
		scanf("%d",&element);
		//循环调用头插
		head=inster_head(head,element);
		//循环调用尾插
		head=inster_rear(head,element);
	}
	//单向循环链表的遍历
	output(head);

	//单向循环链表的头删
	head=delete_head(head);
	output(head);

	//单向循环链表的尾删
	head=delete_rear(head);
	output(head);

	//约瑟夫环问题
	int m;
	printf("please enter m:");
	scanf("%d",&m);
	head=joseph(head,n,m);
	output(head);

	//简单选择排序
	Simple(head);
	output(head);

	return 0;
}
test.c:
#include "head.h"
/*
 * function:    单向循环链表新节点创建
 * @param [ in] 
 * @param [out] 
 * @return      成功返回创建的节点,失败NULL
 */
loop_linklist create()
{
	//堆区申请内存创建新节点
	loop_linklist s=(loop_linklist)malloc(sizeof(struct Node));
	//失败返回NULL
	if(NULL==s)
		return NULL;
	//成功则初始化并返回节点
	s->data=0;
	s->next=s;
	return s;
}
/*
 * function:    头插
 * @param [ in] 
 * @param [out] 头,插入的值
 * @return      头
 */
loop_linklist inster_head(loop_linklist head,datatype element)
{
	//创建新节点
	loop_linklist s=create();
	s->data=element;
	//链表为空
	if(NULL==head){
		head=s;
	}else{//链表不为空
		loop_linklist p=head;
		while(p->next!=head)
		{
			p=p->next;
		}
		s->next=head;
		head=s;
		p->next=head;
	}
	return head;
}
/*
 * function:    头删
 * @param [ in] 
 * @param [out] 头
 * @return      头
 */
loop_linklist delete_head(loop_linklist head)
{
	//链表为空
	if(NULL==head)
		return head;
	//链表不为空
	//先找到最后一个节点
	loop_linklist p=head->next;
	while(p->next!=head)
	{
		p=p->next;
	}
	//开始头插
	loop_linklist del=head;
	head=head->next;
	free(del);
	del=NULL;
	p->next=head;
	return head;
}
/*
 * function:    尾插
 * @param [ in] 
 * @param [out] 头,插入的值
 * @return      头
 */
loop_linklist inster_rear(loop_linklist head,datatype element)
{
	//创建新节点
	loop_linklist s=create();
	s->data=element;
	//如果链表为空
	if(NULL==head){
		head=s;
	}else{//链表不为空
		//先循环到最后一个节点
		loop_linklist p=head;
		while(p->next!=head)
		{
			p=p->next;
		}
		//再尾插
		p->next=s;
		s->next=head;
	}
	return head;
}
/*
 * function:    尾删
 * @param [ in] 
 * @param [out] 头
 * @return      头
 */
loop_linklist delete_rear(loop_linklist head)
{
	//如果链表为空
	if(NULL==head)
		return head;
	//链表不为空
	//只有一个节点
	if(head->next==head){
		free(head);
		head=NULL;
	}else{//有多个节点
		loop_linklist del=head;
		while(del->next->next!=head)
		{
			del=del->next;
		}
		free(del->next);
		del->next=head;
	}
	return head;
}
/*
 * function:    约瑟夫环
 * @param [ in] 
 * @param [out] 头,m
 * @return      NULL
 */
loop_linklist joseph(loop_linklist head,int n,int m)
{
	//如果链表为空
	if(NULL==head)
		return head;
	//链表不为空
	loop_linklist p=head;
	for(int i=0;i<n;i++)//外层控制出圈的轮数
	{
		for(int j=0;j<m-2;j++)//内层控制每轮要出圈的人
		{
			p=p->next;
		}
		//删除p的后继
		loop_linklist del=p->next;
		printf("%-4d",del->data);
		p->next=del->next;
		free(del);
		del=NULL;
		p=p->next;
	}
	puts("");
	return NULL;
}
/*
 * function:    简单选择排序
 * @param [ in] 
 * @param [out] 头
 * @return      无
 */
void Simple(loop_linklist head)
{
	//如果链表为空
	if(NULL==head)
		return;
	//链表不为空
	for(loop_linklist i=head;i->next!=head;i=i->next)
	{
		loop_linklist min=i;
		for(loop_linklist j=i->next;j!=head;j=j->next)
		{
			if(min->data>j->data)
			{
				min=j;
			}
		}
		if(min!=i)
		{
			datatype t=min->data;
			min->data=i->data;
			i->data=t;
		}
	}
}
/*
 * function:    循环链表的遍历
 * @param [ in] 
 * @param [out] 头
 * @return      无
 */
void output(loop_linklist head)
{
	//链表为空
	if(NULL==head)
		return;
	//链表不为空
	loop_linklist p=head;
	do
	{
		printf("%-4d",p->data);
		p=p->next;
	}while(p!=head);
	puts("");
}

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

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

相关文章

SM2259XT量产工具修复金泰克固态硬盘29F01T2ALCQJ1颗粒开卡

在这里插入代码片前言 网心云用的固态硬盘突然坏了识别不了&#xff0c;磁盘管理、diskGenius、pe系统里均无法识别&#xff0c;查询发现可以用开卡工具修复&#xff0c;遂进行了一番折腾。 拆硬盘 如图硬盘是块金泰克240g容量的&#xff0c;拆开后找到主控芯片型号为SM2259…

思科模拟器实验合集

目 录 实验一 常用网络命令的使用.................................... 1 实验二 双绞线制作.................................................. 12 实验三 网络模拟软件.............................................. 15 实验四 交换机基本配置..................…

使用vite创建vue+ts项目,整合常用插件(scss、vue-router、pinia、axios等)和配置

一、检查node版本 指令&#xff1a;node -v 为什么要检查node版本&#xff1f; Vite 需要 Node.js 版本 18&#xff0c;20。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本。 二、创…

SpringBoot:web开发

web开发demo&#xff1a;点击查看 LearnSpringBoot05Web 点击查看更多的SpringBoot教程 技术摘要 webjarsBootstrap模板引擎thymeleaf嵌入式Servlet容器注册web三大组件 一、webjars webjars官网 简介 简介翻译 WebJars 是打包到 JAR&#xff08;Java Archive&#xff09;…

Java线程是怎么实现run方法的执行的呢?【 多线程在JVM中的实现原理剖析】

Java线程是怎么实现run方法的执行的呢&#xff1f;【 多线程在JVM中的实现原理剖析】 查看naive state0 方法JVM_StartThread 方法创建操作系统线程操作系统线程执行 本文转载-极客时间 我们知道Java线程是通过行start()方法来启动的&#xff0c;线程启动后会执行run方法内的代…

【Spring基础】从0开始学习Spring(2)

前言 在上篇文章&#xff0c;我已经讲了Spring中最核心的知识点&#xff1a;IoC&#xff08;控制反转&#xff09;以及DI&#xff08;依赖注入&#xff09;。这篇文章&#xff0c;我将讲一下关于Spring框架中的其它比较琐碎但是又还是挺重要的知识点&#xff0c;因此&#xff…

Excel——有效性、二级菜单联动

一、录入规范数据 1.手动输入序列录入有效性信息 选择需要录入有效性的所有单元格 选择【数据】——【有效性】——【有效性】 在【允许】输入的值之间选择【序列】 在【序列】输入框中输入想要选择的值&#xff0c;中间用逗号&#xff08;必须是英文逗号&#xff09;隔开 。…

[C/C++] -- Boost库、Muduo库编译安装使用

1.Muduo库 Muduo 是一个基于 C11 的高性能网络库&#xff0c;其核心是事件驱动、非阻塞 I/O、线程池等技术&#xff0c;以实现高并发、高性能的网络通信。Muduo 库主要由陈硕先生开发维护&#xff0c;已经成为 C 服务器程序员的常用工具之一。 Muduo 库的主要特点&#xff1a…

NLP_循环神经网络(RNN)

文章目录 RNN结构RNN实战RNN小结 RNN结构 NPLM 在处理长序列时会面临一些挑战。首先&#xff0c;由于它仍然是基于词的模型&#xff0c;因此在处理稀有词汇或者词汇表外的词汇时效果不佳。其次&#xff0c;NPLM不能很好地处理长距离依赖关系。而上面这两个局限&#xff0c;恰恰…

Python进阶--爬取下载人生格言(基于格言网的Python3爬虫)

目录 一、此处需要安装第三方库: 二、抓包分析及Python代码 1、打开人生格言网&#xff08;人生格言-人生格言大全_格言网&#xff09;进行抓包分析 2、请求模块的代码 3、抓包分析人生格言界面 4、获取各种类型的人生格言链接 5、获取下一页的链接 6、获取人生格言的…

基于Java (spring-boot)的酒店管理系统

一、项目介绍 本系统的使用者一共有酒店管理员和用户这两种角色: 1、酒店管理员功能&#xff1a; 登录&#xff1a;管理员可以通过登录功能进入系统&#xff0c;确保只有授权人员可以访问系统。 用户管理&#xff1a;管理员可以添加、编辑和删除酒店的用户&#xff0c;包括前…

【React】如何使antd禁用状态的表单输入组件响应点击事件?

最近遇到一个需求&#xff0c;需要在<Input.textarea>组件中&#xff0c;设置属性disabled为true&#xff0c;使textarea响应点击事件&#xff0c;但直接绑定onClick并不会在禁用状态下被响应。 解决方法1 之后尝试了很多方法&#xff0c;比如设置csspointer-events:no…

python30-Python的运算符结合性和优先级

1&#xff09;所有的数学运算都是从左向右进行的&#xff0c;Python 语言中的大部分运算符也是从左向右结合的&#xff0c;只有单目运算符、赋值运算符和三目运算符例外&#xff0c;它们是从右向左结合的&#xff0c;也就是说&#xff0c;它们是从右向左运算的。 2&#xff09…

01动力云客之环境准备+前端Vite搭建VUE项目入门+引入Element PLUS

1. 技术选型 前端&#xff1a;Html、CSS、JavaScript、Vue、Axios、Element Plus 后端&#xff1a;Spring Boot、Spring Security、MyBatis、MySQL、Redis 相关组件&#xff1a;HiKariCP&#xff08;Spring Boot默认数据库连接池&#xff09;、Spring-Data-Redis&#xff08;S…

JVM Java虚拟机入门指南

文章目录 为什么学习JVMJVM的执行流程JVM的组成部分类加载运行时数据区本地方法接口执行引擎 垃圾回收什么样的对象是垃圾呢内存溢出和内存泄漏定位垃圾的方法对象的finalization机制垃圾回收算法分代回收垃圾回收器 JVM调优参数JVM调优工具Java内存泄漏排查思路CPU飙高排查方案…

力扣精选算法100道—— 连续数组(前缀和专题)

连续数组&#xff08;前缀和专题&#xff09; 目录 &#x1f6a9;了解题意 &#x1f6a9;算法原理 ❗为什么hash设置成<0,-1>键值对 ❗与和为K的子数组比较hash的键值对 &#x1f6a9;代码实现 &#x1f6a9;了解题意 我们看到给定数组里面只有0和1&#xff0c;我们…

【JMeter】使用技巧

在这此对新版本jmeter的学习温习的过程&#xff0c;发现了一些以前不知道的功能&#xff0c;所以&#xff0c;整理出来与大分享。本文内容如下。 如何使用英文界面的jmeter如何使用镜像服务器Jmeter分布式测试启动Debug 日志记录搜索功能线程之间传递变量 如何使用英文界面的…

VMware虚拟机清理瘦身

用了一段时间VMware虚拟机之后&#xff0c;发现内存越来越小&#xff0c;也没装什么软件。。。 1.查询磁盘空间分布 虚拟机中磁盘空间查询 先看一下哪些地方占用的空间大&#xff0c;进行排查。 2.排查VMware复制文件产生的缓存路径 VMware复制文件有一个特点&#xff0c;以…

4、ChatGPT 无法完成的 5 项编码任务

ChatGPT 无法完成的 5 项编码任务 这是 ChatGPT 不能做的事情的一个清单,但这并非详尽无遗。ChatGPT 可以从头开始生成相当不错的代码,但是它不能取代你的工作。 我喜欢将 ChatGPT 视为 StackOverflow 的更智能版本。非常有帮助,但不会很快取代专业人士。当 ChatGPT 问世时…

docker常用10条容器操作命令

Docker 中一些常用的容器操作命令&#xff0c;我们可以根据需要使用这些命令来管理和操作 Docker 容器。我们这次以Hell-world这个镜像为例来说明&#xff1a; 1. docker pull hello-world #拉取hell-world镜像 2. docker images # 查看本地拉取的镜像 3. docker run hello…