数据结构课程设计——猴子选大王问题,我有程序,帮我解释下

来源:百度知道 编辑:UC知道 时间:2024/05/22 01:30:18
题目:n只猴子要选大王,选举办法如下:所有猴子按1,2,3……n编号围成一圈,从第一圈开始顺序1,2……m报数,凡报到m号的退出圈外,如此循环报数,直到圈内只剩一只猴子时,这只猴子就是大王。
利用单向循环链表存储结构模拟此过程,输出选出的大王编号。
程序:#include <stdio.h>
#include <stdlib.h>
#define n 19
#define m 4
typedef struct monkey
{
int num;
struct monkey *next;
} Monkey,*LINK;
void main()
{
LINK p,head,p2;
int i;
head=p=p2=(LINK)malloc(sizeof(Monkey));
for(i=1;i<n;i++)
{
p=(LINK)malloc(sizeof(Monkey));
p2->next=p;
p2=p;
}
p2->next=head;
p=head;
printf("对猴子进行编号!\n");
for(i=1;i<=n;i++)
{
p->num=i;
printf("%d号猴子:%d\n",p->num,p->num);
p=p->next;
}
i=0;
p=head;
while(1)
{
i++;
printf("%d号猴子报:%d\n",p->num,i);if(p->next==p) break;

if(i==m)
{<

#include <stdio.h>
#include <stdlib.h>
#define n 19
#define m 4

typedef struct monkey
{
int num;
struct monkey *next;
} Monkey,*LINK;

void main()
{
LINK p,head,p2;
int i;
head=p=p2=(LINK)malloc(sizeof(Monkey));//三个指针指向同一块内存

for(i=1;i<n;i++)
{
p=(LINK)malloc(sizeof(Monkey));
p2->next=p;
p2=p;
}

p2->next=head;//把链表的首尾相连
p=head;//p指向了第一个结点

printf("对猴子进行编号!\n");
for(i=1;i<=n;i++)
{
p->num=i;//从第一个结点到最后一个结点依次给猴子编号
printf("%d号猴子:%d\n",p->num,p->num);
p=p->next;
}//循环结束,p指向了最后一个结点

i=0;
p=head;//再把p指向第一个结点

while(1)
{
i++;
printf("%d号猴子报:%d\n",p->num,i);
if(p->next==p)
break;//此为while循环的出口

if(i==m)//if语句中是删除结点的过程
{
i=0;