#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{//构造结点类型
int data;
struct LNode *next;
}*LinkList;
void CreateList(LinkList &L,int n);//创造一个循环链表
void OutList(LinkList &L,int m);//数到m出列,并释放该结点
void main()//主函数
{ LinkList La;
int a,b;
printf("Please input the total number and the number of outside:\n");
scanf("%d,%d",&a,&b);
CreateList(La,a);
OutList(La,b);
}
void CreateList(LinkList &L,int n)
{ int i;
LinkList p,q;
if(!(L=(LinkList)malloc(sizeof(LNode))))
{ printf("fail to create list!\n");
return;
}
L->next=NULL;
L->data=1;
q=L;
for(i=1;i<n;i++)//再建n-1个结点
{ p=(LinkList)malloc(sizeof(LNode));
printf("Please input a number:");
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
q=p;
L->data++;
}
q->next=L;
printf("Success to create list!\n");
}
void OutList(LinkList &L,int m)
{ int j,k;
k=L->data;
LinkList s=L,r,t;
while(1)
{ for(j=1;j!=m;j++)
{ r=s;
s=s->next;
}
printf("%d is breaking the ranks!\n",s->data);
t=s;
r->next=s->next;
s=s->next;
free(t);
k--;
if(k==1)
{ printf("%d is breaking the ranks!\n",s->data);
free(s);
L=NULL;
break;
}
}
}
循环链表 约瑟夫环问题实现
最新推荐文章于 2023-12-17 01:45:00 发布