约瑟夫环(函数版).cpp

来自「关于数据结构的一个算法问题」· C++ 代码 · 共 54 行

CPP
54
字号
#include"stdio.h"
typedef struct LNode{
	int Num,Code;
	struct LNode *next;
	}LNode,*LinkList;				//定义节点结构
void Initlist(LinkList &L, int &n, int &m);
void Outlist(LinkList,int,int);
void Initlist(LinkList &L, int &n, int &m)			//数据初始化
{
	LinkList p,s;
	int num,password;
	printf("请输入人的数目:");
	scanf("%d",&n);
	printf("请输入m的初始值:");
	scanf("%d",&m);
	L=new LNode;
	p=L;
	for(num=1;num<=n;num++)				//循环单链表初始化
	{     
		s=new LNode;
		printf("请输入第%d个人的密码:",num);
		scanf("%d",&password);
		s->Code=password; 			//密码初始化
		s->Num=num;				//编号初始化
		p->next=s;
		p=s;
	}	
	p->next=L->next;
	p=L;
	L=L->next;
}
void Outlist(LinkList L,int n,int m)				//出列顺序
{	
	LinkList s,q; 
	int i,j;
	s=L;
	for(i=1;i<=n;i++)
	{ 
		for(j=1;j!=m;j++)s=s->next;		//按m的值顺序报数
		for(q=s;q->next!=s;q=q->next);		//将当前指针移至前一节点
		printf("第%d个出队为%d号\n",i,s->Num);
		m=s->Code;				//将密码Node值传给m
		q->next=s->next;
		s=q->next;
	}
}
void main()
{ 
	LinkList L;
	int n,m;
	Initlist(L,n,m);
	Outlist(L,n,m);
}

⌨️ 快捷键说明

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