CircleLinkList(循环链表)
尾插法和循环链表。
#include <stdio.h>
#include <stdlib.h> typedef struct CircleLinkList
{
int data;
struct CircleLinkList * next;
}circleLinkList; int main()
{
circleLinkList * h, * r, * s;
circleLinkList * L;
int n, num; printf("请输入参与约瑟夫环的总人数及淘汰者编号:");
scanf("%d %d",&n,&num); h = (circleLinkList *)malloc(sizeof(circleLinkList));
r = h;
for(int i = 0; i < n; i++) // 尾插法建立链表
{
s = (circleLinkList *)malloc(sizeof(circleLinkList));
s -> data = i + 1; // 为参与人员编号
r -> next = s; // 中间过程分配的空间插到尾指针后面
r = s;
} r -> next = NULL;
L = h -> next;
while(L)
{
printf("%d ",L -> data);
L = L -> next;
} r -> next = h -> next;
L = h -> next;
while(L -> next != L)
{
for(int j = 1; j < num - 1; j++)
{
L = L -> next;
}
L -> next = L -> next -> next;
L = L -> next;
}
puts("\n最终胜利者:");
printf("%d\n",L -> data); return 0;
}
Output:

本段代码其本质都是用第一段代码中的主要方法 尾插法 来建立链表的):
#include <stdio.h>
#include <stdlib.h> typedef struct CircleLinkList
{
int data;
struct CircleLinkList * next;
}circleLinkList; int main()
{
circleLinkList * h = NULL, * p, * q;
int n , num; printf("请输入参与人数及淘汰编号:");
scanf("%d %d",&n,&num); for(int i = 0; i < n; i++)
{
p = (circleLinkList *)malloc(sizeof(circleLinkList));
if(h == NULL)
h = p;
else
q -> next = p;
p -> data = i + 1;
p -> next = NULL;
q = p;
} q -> next = h;//循环条件 while(h != h -> next)
{
for(int i = 1; i < num - 1; i++)
h = h -> next;
h -> next = h -> next -> next;
h = h -> next;
}
puts("最终胜利者:");
printf("%d\n",h -> data); return 0;
}
CircleLinkList(循环链表)的更多相关文章
- 【数据结构】循环链表&&双向链表详解和代码实例
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 循环链表 1.1 什么是循环链表? 前面介绍了单链表,相信大家还记得相关的概念.其实循环链表跟单链表也没有差别很多,只是在 ...
- 循环链表C语言实现
按照单链表的设计,稍加改动.和单向链表不一样的地方,头节点不指向NULL,而是指向自己head 循环链表的判满 1)判断next是不是头结点,2)判断size /* * CycleLinkList.h ...
- C语言- 基础数据结构和算法 - 循环链表
听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...
- java程序设计之循环链表
照例来说点废话,愿自己生一颗温柔细腻的心,这样女朋友也许一个眼神,一个微笑,我就知道如何做,可惜内心与外表一样粗糙,这一生有幸认识她,愿天下有情人终成眷属. 循环链表,顾名思义循环就好了,所以建一个线 ...
- 单链表、循环链表的JS实现
数据结构系列前言: 数据结构作为程序员的基本知识,需要我们每个人牢牢掌握.近期我也展开了对数据结构的二次学习,来弥补当年挖的坑...... 当时上课的时候也就是跟着听课,没有亲自实现任何一种数据结 ...
- 双向链表、双向循环链表的JS实现
关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法: 单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...
- JAVA 链表操作:循环链表
主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...
- Have Fun with Numbers及循环链表(约瑟夫问题)
1. 循环链表(约瑟夫问题) https://github.com/BodhiXing/Data_Structure 2. Have Fun with Numbers https://pta.pate ...
- javascript中使用循环链表实现约瑟夫环问题
1.问题 传说在公元1 世纪的犹太战争中,犹太历史学家弗拉维奥·约瑟夫斯和他的40 个同胞被罗马士兵包围.犹太士兵决定宁可自杀也不做俘虏,于是商量出了一个自杀方案.他们围成一个圈,从一个人开始,数到第 ...
随机推荐
- MP4转mp3
python实现: 依赖: glob,pydub "Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not wo ...
- 7_1 除法(UVa725)<选择合适的枚举对象>
如果把数字0到9分配成2个整数(各五位数),现在请你写一支程序找出所有的配对使得第一个数可以整除第二个数,而且商为N(2<=N<=79),也就是:abcde / fghijk = N这里每 ...
- Ubuntu18.04安装caffe python3.6 opencv3.2 CPU
设置ubuntu的softwares&updates的源为国内源,这样会提高下载速度. 如果是安装python相关库,为提高速度使用: pip3 install 要下载的库 -i https: ...
- CDQ 分治
引言: 什么是CDQ分治?其实这是一种思想而不是具体算法,因此CDQ分治覆盖的范围相当广泛,在 OI 界初见于陈丹琦 2008 年的集训队作业中,故被称为CDQ分治. 大致分为三类: cdq分治解决与 ...
- Java - Test - TestNG: testng.xml 元素 group
1. 概述 group 相关的元素 groups run 其他相关(不准备提了) package class include exclude 2. 背景 准备 了解了 class 及其子元素 问题 对 ...
- 【DRF版本控制】
目录 使用内置的URLPathVersioning类 使用自定义的版本控制类 "首先,我们开发的项目会有多个版本. 其次,我们的项目版本会随着更新越来越多,我们不可能因出了新版本就不维护旧版 ...
- 编译原理--05 用C++手撕PL/0
前言 目录 01 文法和语言.词法分析复习 02 自顶向下.自底向上的LR分析复习 03 语法制导翻译和中间代码生成复习 04 符号表.运行时存储组织和代码优化复习 05 用C++手撕PL/0 在之前 ...
- Web基础了解版08-JSTL-Core标签库
JSTL JSP为我们提供了可以自定义标签库(Tag Library)的功能,用来替代代码脚本,Sun公司又定义了一套通用的标签库名为JSTL(JSP Standard Tag Library),里面 ...
- 查看KVM宿主机上虚拟机的IP的脚本
查看KVM宿主机上虚拟机的IP的脚本 #!/bin/bash #Auth:liucx #ping当前网段内在线的主机,以便产生arp记录. .{..};do { >& }& do ...
- 吴裕雄 python 神经网络——TensorFlow 训练过程的可视化 TensorBoard的应用
#训练过程的可视化 ,TensorBoard的应用 #导入模块并下载数据集 import tensorflow as tf from tensorflow.examples.tutorials.mni ...