寒假 day2

news2024/9/22 21:33:30

1、请编程实现单向循环链表的头插,头删、尾插、尾删

#include<stdio.h>
#include<string.h>	
#include<stdlib.h>
enum{FALSE=-1,SUCCESS};
typedef int datatype;
//定义节点结构体
//节点:数据域、指针域
typedef struct Node
{
	//数据域:存储数据元素
	datatype data;
	//指针域:存储下一个节点的地址
	struct Node *next;
}*Linklist;
Linklist insert_head(Linklist head,datatype element);
Linklist create();
void output(Linklist head);
Linklist insert_rear(Linklist head,datatype element);
Linklist det_head(Linklist head);
Linklist det_rear(Linklist head);
int main(int argc, const char *argv[])
{
	Linklist head=NULL;
	int n;
	datatype element;
	printf("please enter n;");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		printf("please enter %d element:",i+1);
		scanf("%d",&element);
		head=insert_head(head,element);//头插
		//head=insert_rear(head,element);//尾插
	}
	//遍历
	output(head);
	//头删
	head=det_head(head);
	output(head);
	//尾删
	head=det_rear(head);
	output(head);
    return 0;
}
//创建新节点
Linklist create()
{
	Linklist s=(Linklist)malloc(sizeof(struct Node));
	if(NULL==s)
		return NULL;
	s->data=0;
	s->next=s;
	return s;
}

//头插入
Linklist insert_head(Linklist head,datatype element)
{
	//创建新节点
	Linklist s=create();
	s->data=element;

	//判断链表是否为空
	if(NULL==head)
	{
		head=s;
	}
	else
	{
		Linklist p=head;
		//找到最后一个节点
		while(p->next!=head)
		{
			p=p->next;
		}
		s->next=head;
		head=s;
		//尾节点的指针域指向head
		p->next=head;
	}
	//思路2:
	//s是第一个节点,定义一个二级指针代表s节点
	//头插时s不断后移,因此二级指针永远是最后一个节点
	//所以,可以不用循环寻找最后一个节点
	//二级指针直接指向head即可
	//此思路因不用循环查找,时间复杂度降低
	return head;
}

//遍历输出
void output(Linklist head)
{
	//判断链表是否为空
	if(NULL==head)
	{
		puts("empty");
		return;
	}
	//输出
	Linklist p=head;
	do //先执行 后判断
	{
		printf("%d ",p->data);
		p=p->next;//后移
	}while(p!=head);
	puts("");
}

//尾插
Linklist insert_rear(Linklist head,datatype element)
{
	//创建新节点
	Linklist s=create();
	s->data=element;

	//判断链表是否为空
	if(NULL==head)
	{
		head=s;
	}
	else //存在多个链表
	{
		Linklist p=head;
		//找到最后一个节点
		while(p->next!=head)
		{
			p=p->next;
		}
		p->next=s;
		//尾节点的指针域指向head
		s->next=head;
	}
	return head;
}

//头删
Linklist det_head(Linklist head)
{
	//判断链表是否为空
	if(NULL==head)
		return head;
	//存在多个节点 >=1
	Linklist del=head;
	Linklist p=head;
	while(p->next!=head)
		p=p->next;
	head=head->next;
	free(del);
	del=NULL;
	//尾节点的指针域指向head
	p->next=head;
	return head;
}
//尾删
Linklist det_rear(Linklist head)
{
	//判断链表是否为空
	if(NULL==head)
		return head;
	//一个节点
	else if(head->next==head)
	{
		free(head);
		head=NULL;
		return head;
	}
	//多个节点 >=2
	else
	{
		Linklist del=head;
		//找到倒数第二个节点
		while(del->next->next!=head)
		{
			del=del->next;
		}
		free(del->next);
		//倒数第二个节点指针域指向head
		del->next=head;
		return head;
	}
}


2、请编程实现单向循环链表约瑟夫环
约瑟夫环:用循环链表编程实现约瑟夫问题
n个人围成一圈,从某人开始报数1,2,..., m,数到m的人出圈,然后从出圈的下一个人(m+1)开始重复此过程
直到 全部人出圈,于是得到一个出圈人员的新序列
如当n=8,m=4时,若从第一个位置数起,则所得到的新的序列 为4,8,5,2,1,3,7,6

#include<stdio.h>
#include<string.h>	
#include<stdlib.h>
enum{FALSE=-1,SUCCESS};
typedef int datatype;
//定义节点结构体
//节点:数据域、指针域
typedef struct Node
{
	//数据域:存储数据元素
	datatype data;
	//指针域:存储下一个节点的地址
	struct Node *next;
}*Linklist;
Linklist create();
void output(Linklist head);
Linklist insert_rear(Linklist head,datatype element);
Linklist yusef(Linklist head,int n,int m);
int main(int argc, const char *argv[])
{
	Linklist head=NULL;
	int n;
	datatype element;
	printf("please enter n;");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		printf("please enter %d element:",i+1);
		scanf("%d",&element);
		head=insert_rear(head,element);//尾插
	}
	//约瑟夫循环输出
	int m;
	printf("please enter m:");
	scanf("%d",&m);
	head=yusef(head,n,m);
	output(head);
	return 0;
}
Linklist yusef(Linklist head,int n,int m)
{
	if(NULL==head)
		return head;
	Linklist p=head;
	for(int i=0;i<n;i++)//轮数
	{
		for(int j=0;j<m-2;j++)//次数
		{
			p=p->next;
		}
		Linklist del=p->next;
		p->next=del->next;
		printf("%-5d",del->data);
		free(del);
		del=NULL;
		p=p->next;
	}
	return NULL;
}
//创建新节点
Linklist create()
{
	Linklist s=(Linklist)malloc(sizeof(struct Node));
	if(NULL==s)
		return NULL;
	s->data=0;
	s->next=s;
	return s;
}
//遍历输出
void output(Linklist head)
{
	//判断链表是否为空
	if(NULL==head)
	{
		puts("empty");
		return;
	}
	//输出
	Linklist p=head;
	do //先执行 后判断
	{
		printf("%d ",p->data);
		p=p->next;//后移
	}while(p!=head);
	puts("");
}
//尾插
Linklist insert_rear(Linklist head,datatype element)
{
	//创建新节点
	Linklist s=create();
	s->data=element;

	//判断链表是否为空
	if(NULL==head)
	{
		head=s;
	}
	else //存在多个链表
	{
		Linklist p=head;
		//找到最后一个节点
		while(p->next!=head)
		{
			p=p->next;
		}
		p->next=s;
		//尾节点的指针域指向head
		s->next=head;
	}
	return head;
}


3、请编程实现单向循环链表的排序

#include<stdio.h>
#include<string.h>	
#include<stdlib.h>
enum{FALSE=-1,SUCCESS};
typedef int datatype;
//定义节点结构体
//节点:数据域 指针域
typedef struct Node
{
	//数据域:存储数据元素
	datatype data;
	//指针域:存储下一个节点的地址
	struct Node *next;
}*Linklist;
Linklist create()
{
	Linklist s=(Linklist)malloc(sizeof(struct Node));
	if(NULL==s)
		return NULL;
	//成功则初始化
	s->data=0;
	s->next=s;
	return s;
}
int length(Linklist head)
{
	int len=0;
	Linklist p=head;
	while(p->next!=head)
	{
		len++;
		p=p->next;
	}
    len++;
	return len;
}
Linklist insert_rear(Linklist head,datatype element)
{
	
	//创建新节点s
	Linklist s=create();
	s->data=element;

	//1,判断链表是否为空
	if(NULL==head)
		head=s;
	else//2,存在多个节点
	{
		//循环到最后一个节点
		Linklist p=head;
		while(p->next!=head)
		{
			p=p->next;
		}
		p->next=s;
		//尾节点的指针域指向头
		s->next=head;
	}
	return head;
}
void output(Linklist head)
{
	//1,判断链表是否为空
	if(NULL==head)
	{
		puts("empty");
		return;
	}
	//2,循环遍历
	Linklist p=head;
	do
	{
		printf("%-5d",p->data);
		p=p->next;//后移
	}while(p!=head);
	puts("");
}
void Bubble(Linklist head)
{
	if(NULL==head)
		return;
	int len=length(head);
	for(int i=1;i<len;i++)
	{
		Linklist p=head;
		for(int j=0;j<len-i;j++)
		{
			if(p->data > p->next->data)
			{
				datatype t=p->data;
				p->data=p->next->data;
				p->next->data=t;
			}
				p=p->next;
		}
	}
}
int main(int argc, const char *argv[])
{
	Linklist head=NULL; //定义单链表的头指针
	int n;
	datatype element;//插入的值
	printf("please enter n:");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		printf("please enter %d element:",i+1);
		scanf("%d",&element);
	//	head=insert_head(head,element);
		head=insert_rear(head,element);
	}
	Bubble(head);
	output(head);
	return 0;
}

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

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

相关文章

机器学习系列——(九)决策树

简介 决策树作为机器学习的一种经典算法&#xff0c;在数据挖掘、分类和回归等任务中广泛应用。本文将详细介绍机器学习中的决策树算法&#xff0c;包括其原理、构建过程和应用场景。 原理 决策树是一种基于树状结构的监督学习算法&#xff0c;它通过构建一棵树来对数据进行分…

leetcode刷题(剑指offer)138.随机链表的复制

138.随机链表的复制 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原…

【Linux网络编程一】网络基础1(网络框架)

【Linux网络编程一】网络基础1&#xff08;网络框架&#xff09; 一.什么是协议1.通信问题2.协议本质3.网络协议标准 二.协议分层1.为什么协议要分层2.如何具体的分层 三.操作系统OS与网络协议栈的关系1.核心点&#xff1a;网络通信贯穿协议栈 四.局域网中通信的基本原理1.封装…

使用 IntelliJ IDEA 配合 Docker 对 Weblogic 中间件进行远程调试

使用idea对jar包远程调试&#xff1a; 打开一个springboot的项目进行远程调试设置&#xff1a; 运行&#xff1a; 其实我不太明白远程调试的意义&#xff0c;本地直接debug不好嘛。。。 点击debug的按钮&#xff0c;打断点测试&#xff1a; 跑到断点处&#xff1a; 远程de…

JDK17中的密封类sealed和permits使用指南:什么是Java中的sealed和permits?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

MYSQL——MySQL8.3无法启动

在新电脑上装了个MySQL&#xff0c;但是无法使用net start mysql启动&#xff0c;很是纳闷&#xff0c;使用mysqld --console去查看报错&#xff0c;也是没报错的&#xff0c;但是奇怪的是&#xff0c;我输入完这个mysqld --console之后&#xff0c;就等于启动了mysql了&#x…

一步步成为React全栈大师:从环境搭建到应用部署

文章目录 第一步&#xff1a;环境搭建第二步&#xff1a;了解React基础第三步&#xff1a;组件与路由第四步&#xff1a;状态管理第五步&#xff1a;接口与数据交互第六步&#xff1a;样式与布局第七步&#xff1a;测试第八步&#xff1a;构建与部署《深入浅出React开发指南》内…

系统架构20 - 统一建模语言UML(上)

统一建模语言 组成要素事物关系 在目前的软件开发方法中&#xff0c;面向对象的方法占据着主导地位。面向对象方法的主导地位也决定着软件开发过程模型化技术的发展&#xff0c;面向对象的建模技术方法也就成为主导的方法。 公认的面向对象建模语言出现于20世纪70年代中期。从1…

快速上手AI代码生成:CodeGeeX

1. VSCode等IDE插件直接搜到 CodeGeeX 就可以安装&#xff0c;装上之后&#xff0c;会看到左侧出现了&#xff1a; 2. 登陆以后&#xff0c;在代码区域就可以直接用了。 3. 官网功能说明文档&#xff08;非常简洁清晰&#xff09;&#xff1a; https://zhipu-ai.feishu.cn/wik…

文心一言 VS 讯飞星火 VS chatgpt (193)-- 算法导论14.3 1题

一、用go语言&#xff0c;写出作用于区间树的结点且在 〇(1) 时间内更新 max 属性的过程 LEFT-ROTATE 的伪代码。 文心一言&#xff1a; 以下是一个简单的LEFT-ROTATE的伪代码&#xff0c;它对一个二叉搜索树进行左旋转操作。这个操作的作用是更新节点的max属性&#xff0c;使…

css3动画的三种实现方式

目录 一、是什么二、实现方式transition 实现渐变动画transform 转变动画animation 实现自定义动画 三、总结参考文献 一、是什么 CSS动画&#xff08;CSS Animations&#xff09;是为层叠样式表建议的允许可扩展标记语言&#xff08;XML&#xff09;元素使用CSS的动画的模块 …

时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现…

【Django】Cookie和Session的使用

Cookies和Session 1. 会话 从打开浏览器访问一个网站&#xff0c;到关闭浏览器结束此次访问&#xff0c;称之为一次会话。 HTTP协议是无状态的&#xff0c;导致会话状态难以保持。 Cookies和Session就是为了保持会话状态而诞生的两个存储技术。 2. Cookies 2.1 Cookies定…

C#验证字符串是否纯字母:用正则表达式 vs 用Char.IsLetter方法加遍历

目录 一、使用的方法 1.使用正则表达式 2.使用Char.IsLetter方法 二、实例 1. 源码 2.生成效果 一、使用的方法 1.使用正则表达式 使用正则表达式可以验证用户输入的字符串是否为字母。匹配的正则表达式可以是&#xff1a;^[A-Za-z]$、^[A-Za-z]{1,}$、^[A-Za-z]*$。 …

斗地主登录界面(JAVA图形化界面)设置

1.实现代码 import CodeUtil.CodeUtil; import domain.User;import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList;public class LoginGame extends JFrame implements MouseListen…

《云原生安全攻防》-- 容器安全风险分析

在本节课程中&#xff0c;我们将提供一个全面的视角&#xff0c;来深入探讨容器环境下的安全风险&#xff0c;帮忙大家建立起容器环境下安全风险的整体认知。 在这个课程中&#xff0c;我们将学习以下内容&#xff1a; 容器技术概述&#xff1a;什么是容器技术以及它解决了什么…

cesium-水平测距

cesium测量两点间的距离 <template><div id"cesiumContainer" style"height: 100vh;"></div><div id"toolbar" style"position: fixed;top:20px;left:220px;"><el-breadcrumb><el-breadcrumb-item&…

python基于django的公交线路查询系统mf383

1.个人信息的管理&#xff1a;对用户名&#xff0c;密码的增加、删除等 2.线路信息的管理&#xff1a;对线路的增加、修改、删除等 3.站点信息的管理&#xff1a;对站点的增加、修改、删除等 4.车次信息的管理&#xff1a;对车次的增加、修改、删除等 5.线路查询、站点查询 …

辽宁省社会保险事业服务中心网上办事大厅环境配置

环境配置 在网上办事系统主界面&#xff0c;选择“环境配置”&#xff1b;选择插件下载模块&#xff0c;进入插件下载主页面&#xff0c;如图 1 所示&#xff1a; 图1 插件下载功能 3.点击 按钮&#xff0c;弹出插件下载界面&#xff1b; 若插件下载页面如图2所示&#xff0…

遗失的源代码之回归之路的探索与实践

背景 最近比较突然被安排接手一个项目,该项目的情况如下 原生和RN结合的混合开发模式组件化开发,有很多基础组件以及业务组件但是在梳理项目依赖时发现了个别组件源码不全的情况,于是写了个cli用于对比两个版本产物文件,生成差异结果以便于快速进行源码找回恢复。 结果如下…