数据结构实验2 约瑟夫环

赞赏码 & 联系方式 & 个人闲话

约瑟夫环:

#include
#include
#include
#define ok 1
#define error 0
typedef struct lnode
{
	int data;
	int data2;
	struct lnode *next;
}lnode, *linklist;
int createlist(linklist *l,int n)           /*创建一个循环链表并赋值*/
{
	linklist p, r;
	int i;
	if (n == 0)return error;
	*l = (linklist)malloc(sizeof(lnode));
	r = *l;
	printf("请输入每个人的密码:");
	r->data = 1;
	scanf("%d", &r->data2);
	for (i = 2; i<=n; i++)
	{
		p = (linklist)malloc(sizeof(lnode));
		p->data = i;
		scanf("%d", &p->data2);
		r->next = p;
		r = p;
	}
	r->next = *l;
	return ok;
}
int listdelete(linklist *l, int n ,int m)       /*完成循环检索输出*/
{
	linklist p;
	for (p = *l; n > 1;)
	{
		int j;
		linklist  q;
		if (n == 1)break;
		j = 2;
		if (m == 1)
			m = 1 + n;
		while (j < m)
			{
				p = p->next;
				j++;
			}
			printf("%12d\n", p->next->data);
		q = p->next;
		p->next = q->next;
		p = q->next;
		m = q -> data2;
		free(q);
		n--;
	}
	printf("%12d\n", p->data );
	return ok;
}
void main()
{
	linklist l;
	int n,m;
	printf("请输入人数:");
	scanf("%d", &n);
	createlist(&l, n);             /*创建一个循环链表并赋值*/
	printf("请输入初始密码:");
	scanf("%d", &m );              /*输入初始密码*/
	printf("出列顺序为:\n");
	listdelete(&l, n, m);          /*按照编号及密码输出*/
}

数据结构实验2 约瑟夫环_第1张图片

你可能感兴趣的:(数据结构实验)