链表实现约瑟夫环

简介: //Dev c++ #include#include#include//调用putchar函数typedef struct stu{ int num; struct stu*next;}stu,*pointer;int main(){ int i,n,m,count; pointer p,q,r;...

//Dev c++

#include<stdio.h>
#include<malloc.h>
#include<string.h>//调用putchar函数
typedef struct stu{
int num;
struct stu*next;
}stu,*pointer;
int main()
{
int i,n,m,count;
pointer p,q,r;
r=p=q=(pointer)malloc(sizeof(pointer));
p->num=1;p->next=NULL;//无头结点
printf("Input n and m:");//m为步长
scanf("%d%d",&n,&m);
for(i=2;i<=n;i++)//建立链表
{
p=(pointer)malloc(sizeof(pointer));
p->num=i;
r->next=p;
r=r->next;
}
p->next=q;//循环链表
printf("出圈顺序为:\n");
for(i=1,count=0;count<n-1;)//删除(n-1)个数
{
if(i==m)
{
printf("%d ",q->num);
p->next=q->next;//删除q节点
free(q);
q=p->next;
count++;
i=1;
}
else
{
p=p->next;
q=q->next;
i++;//i++不能写在for循环内部
}
}
printf("%d ",p->num);
putchar('\n');
system("pause");
return 0;
}

 

目录
相关文章
|
21天前
|
存储 算法 C语言
线性表,双向链表,静态链表,循环链表(约瑟夫环)(上)
线性表,双向链表,静态链表,循环链表(约瑟夫环)
39 5
|
11月前
|
缓存 算法
Algorithms_基础数据结构(04)_线性表之链表_单向循环链表&约瑟夫环问题
Algorithms_基础数据结构(04)_线性表之链表_单向循环链表&约瑟夫环问题
68 0
|
存储 算法 前端开发
【前端算法】链表和数组实现队列的区别
比较链表和数组实现队列的性能
161 0
|
存储
链表的实现:无头单向非循环链表的实现
链表的实现:无头单向非循环链表的实现
53 0
链表的实现:无头单向非循环链表的实现
|
缓存 JavaScript 前端开发
javascript 之顺序队列(链表实现)
javascript 之顺序队列(链表实现)
78 0
|
Java
链表的中间结点(Java实现)
链表的中间结点(Java实现)
68 0
|
Java
两个链表的第一个公共节点(Java实现)
两个链表的第一个公共节点(Java实现)
104 0
两个链表的第一个公共节点(Java实现)
|
Java
Java实现链表中倒数第k个结点
链表中倒数第k个结点 输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。
74 0
|
消息中间件 存储 缓存
基于数组和链表实现队列
创建大数组实现对象:里面包含的信息公共初始化: 初始化页工厂:索引页工厂、数据页工厂、元数据页工厂,初始化数组索引、初始化数据页索引,通过队列前置索引页工厂获取索引页,获取队列front索引buffer,获取front,也即索引。这个实现和kafka是类似的,也即需要有相关页信息 入队列:进行入队操作是一个追加的操作,首先判断容量是否够,不够,则进行扩容操作。通过缓存拿到映射页实现,然后通过映射页。再通过锁,仅锁定创建页,索引用完后进行移除操作,映射页面实现,使用双向校验,如果为空,则创建页索引对象,通过索引拿到文件名称,然后通过读写通道进行读写操作。使用fileChannal调用映射方法获取
117 0
基于数组和链表实现队列