⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 josephus.cpp

📁 文件夹中包括常用的数据结构的算法
💻 CPP
字号:
#include <malloc.h>
#include <stdio.h>
#define NUM_CIRCLE 9

typedef struct  LNode 
{ 
	int data;  // 数据域
	int nextOut;
    struct LNode   *next;  // 指针域
}LNode, *LinkList;  


void Josephus(LinkList  L)
{
	LNode *pre, *cur;
	int nextOutNum;
	
	pre = cur = L;
	nextOutNum = cur->nextOut;  //将第一次出局的号赋给初值
	if(nextOutNum == 1)  
		printf("The nextOutNum of the first node is not allow to be 1\n"); //第一个节点的nextOutNum不允许等于1
	
	while(cur->next != cur )
	{
		for(int i=1; i < nextOutNum; i++ )     //注意第一次时计数是从当前节点开始
		{
			pre=cur;
		    cur = cur->next;
		}
		
		pre->next = cur->next;                  //删除当前节点
		nextOutNum = cur->nextOut;
		printf("%d out \n", cur->data);
		free(cur);
		cur = pre->next;
	}

	printf("The last one is %d \n", cur->data);

}

void main()
{
   // LinkList L;
    LNode *p, *Head;

    Head = p = (LinkList) malloc (sizeof (LNode));
//	p = *L;

	p->data = 1;               //令第一个节点编号1
	p->nextOut = 3;   //令每一个节点指向的下一次出局的数全部等于3 

	for(int i = 2; i <= NUM_CIRCLE; i++)
	{
	   p->next = (LNode *) malloc (sizeof (LNode));
	   p = p->next;
       p->data = i;               //令第一个节点编号1
       p->nextOut = 3;   //令每一个节点指向的下一次出局的数全部等于3 
	};
	p->next = Head;

    Josephus(Head);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -