#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}node;
node *create(int n)
{
int i;
node *p = NULL,*head;
node *temp;
head = (node*)malloc(sizeof(node));
p=head;
for(i=1;i<=n;i++){
temp = (node*)malloc(sizeof(node));
temp->data = i;
p->next = temp;
p=temp;
}
temp->next = head->next;
free(head);
return temp->next;
}
int main(){
int m,n,i;
node *temp;//用于释放节点
node *p;
printf("输入人数:");
scanf("%d",&m);
printf("输入出局密码:");
scanf("%d",&n);
p=create(m);
if(n>1)
{
while(p!=p->next){
for(i=1;i<m-1;i++)
{//找到要剔除的前一个人
p = p->next;
}
printf("%d ",p->next->data);
temp = p->next;
p->next = temp->next;
free(temp);
p = p->next;
}
printf("%d\n",p->data);
}
else{
for(i=1;i<=m;i++){
printf("%d ",i);
}
}
return 0;
}
数据结构(循环链表)实现约瑟夫问题
最新推荐文章于 2021-04-04 10:20:18 发布