记录约瑟夫环

来源:互联网 发布:个体诊所软件 编辑:程序博客网 时间:2024/06/16 01:08
#include <stdio.h>
#include <malloc.h>
#define max 10
typedef int ElemType;
typedef struct CLNode
    {
       ElemType date;
       ElemType number;
       struct CLNode *next;
    }CLNode,*CLinkList;
CLinkList crt_clinklist();
void prn_clinklist(CLinkList tail);
CLinkList del_clinklist(CLinkList tail,int i);
void game(CLinkList tail,int first_number);
CLinkList crt_clinklist()
{
    CLinkList tail=NULL;
    CLNode *s,*head=NULL;
    int x[max];
    printf("请输入若干整数并以-1结束");
    for(int i=0;i<max;i++)
    {
    scanf("%d",&x[i]);
    if(x[i]!=-1)
     {
        s=(CLNode *)malloc(sizeof(CLNode));
        s->date=x[i];
        s->number=i+1;
        if(head==NULL){head=s;tail=s;}
        else {tail->next=s;tail=s;}
     }
     else break;
    }
    if(tail!=NULL){tail->next=head;}
    return tail;
}
void prn_clinklist(CLinkList tail)
{
    CLNode *p;
    p=tail->next;
    while(p!=tail)
    {
        printf("密码是%d,",p->date);
        p=p->next;
    }
     printf("密码是%d\n",p->date);
}
CLinkList del_clinklist(CLinkList tail,int i)
{
    CLNode *q,*pre;
    pre=tail;q=tail->next;/*只剩一个节点的情况未考虑*/
    for(int j=1;j<i;j++)
    {
        q=q->next;
        pre=pre->next;
    }
    pre=q->next;
    free(q);
    return pre;
}
void game(CLinkList tail,int first_number)
{
    CLNode *q,*pre;
    pre=tail;
    while(pre->next!=pre)
    {
        q=pre->next;
      for(int j=1;j<first_number;j++)
      {
        q=q->next;
        pre=pre->next;
      }
      printf("出列人序号为%d",q->number);
      first_number=q->date;
      pre->next=q->next;
    }
    printf("出列人序号为%d",pre->number);
}
void main()
{
    int m;
  CLinkList my_clist;
  my_clist=crt_clinklist();
  prn_clinklist(my_clist);
  printf("请输入密码:");
  scanf("%d",&m);
  game(my_clist,m);
    }



////////////////修改数次之后终于成功了,自己独立写完的第一个程序,纪念此刻惊喜。希望两年以后自己还能保持这份动力,做更多