约瑟夫环的两种实现方式--数组和循环链表

约瑟夫环问题的数组与链表实现
本文详细介绍了约瑟夫环问题的两种实现方式:使用数组和循环链表。通过具体的代码示例,展示了如何在C++中初始化数组和链表,以及如何通过特定的规则来模拟约瑟夫环的执行过程,最终找出存活者的位置。

1.数组实现形式

#include<iostream>
#define LEN 40
#define Interval 3
int main()
{
	int R[LEN];
	for(int i=0;i<LEN;i++)
		R[i]=1;//数组初始化 1:活着 0:自杀
	int lefcount=LEN;//剩下的人数 
	int index=0,count=0;;//数组下标  统计计数
	while(leftcount>2)
	{
		if(R[index]==1)
		{
			count++;
			if(count==Interval)
			{
				R[index]=0;
				count=0;
				leftcount--;
			}
			index++;
			if(index==LEN)
				index=0;
		}
	} 
	for(int j=0;j<LEN;j++)
		if(R[j]==1)
			cout<<j<<" ";
	return 0;
}

2.循环链表

typedef struct LNode{
	int data;
	struct LNode *next;
}LNode;

void create(LNode *&L)
{
	LNode *r,*s;
	L=(LNode*)malloc(sizeof(LNode));
	r=L;
	for(i=1;i<=n;i++)
	{
		s=(LNode*)malloc(sizeof(LNode));
		s->data=i;
		r->next=s;
		r=s;
	}
	r->next=L->next;
}

void  yuesehuan(LNode *L,int m,int n)
{
	LNode *p=L->next;
	LNode *temp;
	for(int i=1;i<m/2;i++)//淘汰一半人数 
	{
		for(int j=0;j<n-1;j++)
			p=p->next;
		temp=p->next;
		p->next=temp->next;p=temp->next;
		free(temp); 
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值