(约瑟夫环)这是使用单链表做的约瑟夫环。如何改为单循环链表????????

2025-05-13 21:01:18
推荐回答(1个)
回答1:

看看行不?没有调用函数:

#include  //这是改为单循环链表!!!!!
#include
#include
typedef int ElemType;
typedef struct SingleNode
{
 ElemType data;
 struct SingleNode *next;
}SLL,*LinkList;
int main()
{
 SLL *head ,*use,*temp;
 int i,n,m,k,a=0;
 printf("请输入总人数n:"); 
 scanf("%d",&n);
    
 printf("从第m个人开始数起,请输入m:"); 
 scanf("%d",&m);
    
 printf("数到第k个人,该人出列,请输入k:"); 
 scanf("%d",&k);
 
 head = use = (SLL *) malloc(sizeof(SLL));//建立链表,形成链表头
   head->data = 1;
 
   for (i = 2; i <= n; i++)//形成其余的n-1个
   {
    use->next = (SLL *) malloc(sizeof(SLL));
    use = use->next;
    use->data = i;//第i个置编号i
   }
   use->next = head;//末首相连,形成环
 printf("人员序号为:");  //输出人员的序号
 temp=head;
 for(i=0;i {
  printf("%d ",temp->data);
  temp=temp->next;
 }
 printf("\n");
 
 for(i=0;i {
  use=use->next;
 }
printf("人员出列顺序为:");
while (n) {
 for (i = 1; i < k; i++)//掠过k-1个
  use = use->next;
 temp = use->next;//temp指向第k个
 use->next = temp->next;//第k个从环中脱钩
 printf("%d ", temp->data);
 free(temp);//释放第k个表元占用的空间
 n--;
}
printf("\n");
 return 0;
}