约瑟夫环问题解决

链表

struct List
{int data;struct List* next;
}

创建链表

单链表
实现
struct List* listCreate()
{int data;struct List* head = NULL;struct List* pre = NULL;struct List* current = NULL;while(scanf("%d",&data) && data != -1){current = (struct List*)malloc(sizeof(struct List));if(head == NULL)head = current;elsepre->next = current;current->next = NULL;current->data = data;pre = current;}return head;
}
错例
struct List* listCreate()
{int data;;struct List* current = NULL;struct List* head = current;while (scanf("%d", &data) && data != -1){current = (struct List*)malloc(sizeof(struct List));if (head == NULL)head = current;current->data = data;current = current->next;}return head;
}

在使用malloc函数开辟的空间中,不要进行指针的移动,因为一旦移动之后可能出现申请的空间和释放空间大小的不匹配

循环链表

单独创建
struct List* circle_listCreate()
{int data;struct List* head = NULL;struct List* pre = NULL;struct List* current = NULL;while(scanf("%d",&data) && data != -1){current = (struct List*)malloc(sizeof(struct List));if(head == NULL)head = current;elsepre->next = current;current->next = head;current->data = data;pre = current;}return head;
}
逐节点创建
void Append(struct List** L,int data)
{struct List* head = *L;struct List* newNode = NULL;if((*L) == NULL){(*L) = (struct List*)malloc(sizeof(struct List));(*L)->data = data;head = (*L);(*L)->next = head;}else{while ((*L)->next != head){(*L) = (*L)->next;}newNode = (struct List*)malloc(sizeof(struct List));newNode->data = data;(*L)->next = newNode;newNode->next = head;*L = head;}
}
约瑟夫环问题
void Append(struct List** L,int data)
{struct List* head = *L;struct List* newNode = NULL;if((*L) == NULL){(*L) = (struct List*)malloc(sizeof(struct List));(*L)->data = data;head = (*L);(*L)->next = head;}else{while ((*L)->next != head){(*L) = (*L)->next;}newNode = (struct List*)malloc(sizeof(struct List));newNode->data = data;(*L)->next = newNode;newNode->next = head;*L = head;}
}
void Display(struct List* L,int num)
{struct List* head = L;struct List* pre = NULL;struct List* kill = NULL;int nodeNum = 0;while (L->next != head){nodeNum++;L = L->next;}pre = L;L = L->next;nodeNum++;while (nodeNUm){if (nodeNum == 1){printf("%d",L->data);free(L);return;}for (int i=1; i < m; i++){pre = L;L = L->next;}printf("%d ", L->data);kill = L;L = L->next;free(kill);nodeNum--;}
}

删除节点

实现方式一:

struct list* listDelete(struct list* L,int data)
{struct list* pre = L;struct list* head = L;struct list* kill;while(head != NULL && head->data == m){kill = head;head = head->next;free(kill);}if(head == NULL)return head;pre = head;kill = head->next;while(kill!=NULL){if(kill->data == m){pre->next = kill->next;free(kill);kill = pre->next;}else{pre = kill;kill = kill->next;}}return head;
}

实现方式二:

struct list* listDelete(struct list** L,int data)
{struct list* head = (*L), * pre = (*L);struct list* newL = *L;struct list* kill = NULL;while (*L !- NULL){if((*L)->data == data){if((*L) == newL)newL == newL->next;elsepre->next = (*L)->next;kill = (*L);(*L) = (*L)->next;free(kill);}else{pre = (*L);(*L) = (*L)->next;}}*L = newL;return head;
}

删除节点并建立新链表

struct list* list_Delete_Create(struct list** L) //数据为奇数存为新链表
{struct list* newhead = NULL, * newcurrent = NULL, * newpre = NULL;struct list* newL = *L;struct list* kill = NULL;struct list* pre = *L;while (*L){if((*L)->data%2 == 1){newcurrent = (struct list*)malloc(sizeof(struct list));if(newhead == NULL)newhead = newcurrent;elsenewpre->next = newcurrent;newcurrent->data = (*L)->data;newcurrent->next = NULL;newpre = newcurrent;if((*L) == newL)newL = newL->next;elsepre-next = (*L)->next;kill = (*L);(*L)=(*L)->next;free(kill);}else{pre = (*L);(*L) = (*L)->next;}}*L = newL;return newhead;
}

逆置链表

实现

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

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

相关文章

使用numpy处理图片——灰阶影像

大纲 载入图像灰阶处理lightnessaverageluminosity 灰阶&#xff08;Gray scale&#xff09;影像是每个像素只有一个采样颜色的图像。 载入图像 import numpy as np import PIL.Image as Imageimg Image.open(lena.png) data np.array(img)灰阶处理 我们有三种方法来生成这…

Linux中常使用的命令之ls、cd、pwd、mkdir、rmdir

ls: 列出目录 cd&#xff1a;切换目录 pwd&#xff1a;显示目前的目录 mkdir&#xff1a;创建一个新的目录 -m &#xff1a;配置文件的权限-p &#xff1a;帮助你直接将所需要的目录(包含上一级目录)递归创建起来&#xff01; rmdir&#xff1a;删除一个空的目录 注意这…

基本数据结构 | 并查集

基本介绍 并查集主要实现两个操作&#xff1a; 合并两个集合查询某个元素的祖宗节点 并查集的两个优化&#xff1a; 路径压缩&#xff1a; O ( l o g n ) O(logn) O(logn)按秩合并&#xff1a; O ( l o g n ) O(logn) O(logn)&#xff0c;代码比较复杂&#xff0c;一般不单…

基于springboot时间管理系统源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括时间管理系统的网络应用&#xff0c;在外国时间管理系统已经是很普遍的方式&#xff0c;不过国内的管理系统可能还处于起步阶段。时间管理系统具有时间管理功能的选择。时间管…

基于强化学习的航线规划算法

基于Q-learning的无人机三维路径规划&#xff08;含完整C代码&#xff09;_q-learning 无人机路径规划代码-CSDN博客 基于Q-Learing的路径规划MATLAB仿真系统_强化学习MATLAB资源-CSDN文库

Vue-路由-配置

1. VueRouter 的 使用 (5 2) 参考官网 5个基础步骤 (固定) 下载 VueRouter 模块到当前工程&#xff0c;这里指定版本&#xff1a;3.6.5 yarn add vue-router3.6.5引入 vue-router import VueRouter from vue-router安装注册 Vue.use(VueRouter) // VueRouter插件初始化创…

Unity Shader 属性的定义

Unity Shader 属性的定义 什么是材质球 人的衣服 什么是shader 决定材质跟灯光的作用 Property 若是把shader看作class&#xff0c;那么Property就可以看成成员变量 属性定义的通用格式 Properites{ Property[Property…] } ep:定义一个int&#xff1a; name("dis…

ODBC 在指定的DSN中,驱动程序和应用程序之间的体系结构不匹配

常规办法就是64位或32位匹配&#xff0c;如果解决不了&#xff0c;往下看。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓解决方案↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 解压AccessDatabaseEngine_X64.exe&#xf…

为什么选择Go语言编写网络应用程序

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等&#xff0c;您的关注将是我的更新动力&#xff01; 作为一名后端开发者&#xff0c;你一定对选择合适的编程语言来编写网络应用程序非常重视。在众多的编程语言中&#xff0c;Go语言…

我在代码随想录|写代码Day7之454.四数相加II ,​ 383. 赎金信​,​ 15. 三数之和​

454.四数相加II 题目 解题思路 四个数字相加的和为0,我们要选俩数组,让他们的笛卡尔积储存在哈希表中,然后我们要找的是这俩数和的相反数,然后就是将后面俩数组相加在后面的数组和中找相反数. 383. 赎金信 解题思路 题目意思是让在字符串1中找到字母组成字符串2所以找字符串1…

弹性盒模型(Flexbox)

弹性盒模型&#xff08;Flexbox&#xff09;是一种用于布局和排列元素的CSS模块。它提供了一种灵活的方式来创建响应式的、可伸缩的布局&#xff0c;适应不同尺寸的屏幕和设备。 弹性盒模型通过定义容器&#xff08;父元素&#xff09;和其内部的弹性项目&#xff08;子元素&a…

设备树OF函数操作实验-读取设备节点的整型数组元素的属性

一. 简介 本文学习使用设备树操作 OF函数&#xff0c;读取设备节点的整型的属性值。 读取设备树文件 imx6ull-14x14-evk.dts 中一个设备节点的信息。这里读取 backlight设备节点的 brightness-levels属性值。 二. 读取设备节点的整型数组元素的属性 1. backlight设备节点信…

JPA查询PostgreSQL行排序问题

文章目录 问题处理PostgreSQL排序相关JPA相关介绍 问题 我们项目使用Spring Boot构建&#xff0c;使用JHipster生成业务代码&#xff0c;包含基础的增删改查代码使用PostgreSQL作为业务数据库&#xff0c;使用自动生成的JPA构建数据更新语查询在查询某个实体类的列表时&#x…

【无标题】关于异常处理容易犯的错

一般项目是方法打上 try…catch…捕获所有异常记录日志&#xff0c;有些会使用 AOP 来进行类似的“统一异常处理”。 其实&#xff0c;这种处理异常的方式非常不可取。那么今天&#xff0c;我就和你分享下不可取的原因、与异常处理相关的坑和最佳实践。 捕获和处理异常容易犯…

【PostgreSQL】数据查询-VALUES

PostgreSQL数据查询-VALUES PostgreSQL中VALUES提供了一种生成“常量表”的方法&#xff0c;该表可在查询中使用&#xff0c;而无需在磁盘上实际创建和填充表。语法是 VALUES ( expression [, ...] ) [, ...]每个带括号的表达式列表都会在表中生成一行。所有列表必须具有相同…

Springboot开发的大学生宿舍共享厨房系统宿舍自习室宿舍洗衣房系统寝室系统技术文档论文功能部分

第三章 本系统采用Java语言开发&#xff0c;后端使用springboot框架开发&#xff0c;使用MySQL数据库存储数据&#xff0c;前端使用jsp页面&#xff0c;前端框架使用响应式框架bootatrap布局。本章将简单介绍所使用的技术及其理论依据。 3.1springboot介绍 SpringBoot 是一个…

C#监听Dictionary、List的写入操作

前言 在开发中&#xff0c;对于内置值类型和string我们可以通过封装属性在Set中监听写入操作&#xff0c;但是对于Dictionary、List等就不能监听到Add、Remove等写入操作。 所以一般采取两种方式监听它们的读写操作&#xff0c;一种是封装操作方法&#xff0c;间接进行监听&am…

【Py/Java/C++三种语言详解】LeetCode每日一题240113【贪心】LeetCode2182、构建限制重复的字符串

文章目录 题目链接题目描述解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目链接 LeetCode2182、构建限制重复的字符串 题目描述 给你一个字符串 s 和一个整数 repeatLimit &#xff0c;用 s 中的字符构造一个新字符串 repeatLimitedStri…

(南京观海微电子)——色温介绍

色温是表示光线中包含颜色成分的一个计量单位。从理论上说&#xff0c;黑体温度指绝对黑体从绝对零度&#xff08;&#xff0d;273℃&#xff09;开始加温后所呈现的颜色。黑体在受热后&#xff0c;逐渐由黑变红&#xff0c;转黄&#xff0c;发白&#xff0c;最后发出蓝色光。当…

im6ull学习总结(三-五)freetype显示正行字

知识补充 笛卡尔坐标系 这里笛卡尔坐标系就是初高中学的直角坐标系的第一象限 lcd坐标系则不同 这两个坐标系如何转换 观察两个坐标系 点&#xff08;x,y&#xff09;的x坐标在两个坐标系中相同&#xff0c;纵坐标&#xff08;y&#xff09;存在着yV-yV V是整个屏幕的行数的像…