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

📄 约瑟夫(自己).txt

📁 约瑟夫环是学习单链表的一个比较好的垫脚石
💻 TXT
字号:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct Node
{
    int number;
    int mima;
    struct Node * next;
}Node, *Linklist;
 
void ListInit(Linklist *L)                // 初始化单链表
{
    *L=(Linklist)malloc(sizeof(Node));
    (*L)->next=*L;
}

void Insert(Linklist L, int e_mima, int e_number)
{
   // Linklist p,q;
	Node *p,*q;
    p = (Linklist)malloc(sizeof(Node));
    p->mima = e_mima;
    p->number = e_number;
    q = L;
    while(q->next != L)q = q->next;
    p->next = q->next;
    q->next = p;
}

void Delete(Linklist L, int i)
{
   // Linklist p,q;
    Node *p,*q;
    q = L;
    while(q->next != q && q->next->number != i)
        q = q->next;
    if(q->next->number == i)
    {
        p = q->next;
        q->next = p->next;
        free(p);
    }
}


void main()
{
  // Linklist p,q,L;
	Node *p,*q,*L;
    int i,j,m,n,mima;
    printf("请输入人数和初始密码:");
    scanf("%d%d",&n,&m);
    if(n<=0 || m<=0)return;
    ListInit(&L);
    i=1;
    while(i<=n)
    {
        printf("请输入第 %d 个人的密码:",i);
        scanf("%d",&mima);
        if(mima <= 0)continue;
            Insert(L, mima, i);
        i++;
    }
    /*i = 1;
    p = L->next;
    while(L->next != L)
    {
        q = p;
        p = p->next;
        if(p ==L)
        {
            q = p;
            p = p->next;
        }
        i++;
        if(i == m)
        {
            printf("%d\t",p->number);
            m = p->mima;
            Delete(L, p->number);
            p = q;
            i = 0;
        }
    }*/
    p = L->next;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<m;j++)
		{ 
			q=p;
			p=p->next;
			while(p==L)
			{
				q=p;
				p=p->next;
			}
		}
		printf("%d\t",p->number);
		m=p->mima;
		Delete(L, p->number);
        p = q->next;
		if(p==L)p=p->next;

		}
	}


⌨️ 快捷键说明

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