数据结构与算法-线性表13
//编号为1-N的N个人按顺时针方向围坐一圈,每人持有一个密码(正整数,可自由输入),//开始人选一个正整数作为报数上限值M,从第一个人按顺时针方向自1开始顺序报数,
//报到M时停止报数。报M的人出列,将他的密码作为新的M值,从他开始继续顺时针报数,
//如此循环下去,直到所有人全部出列为止。
typedef struct node
{
int num;
int data;
struct node *next;
}node;
node *create(int n)//创建n个数据结构
{
node *p=NULL,*head,*temp;
int i=1;
head=(node*)malloc(sizeof(node));//申请内存
p=head;
if(0!=n)
{
while(i<=n)
{
temp=(node *)malloc(sizeof(node));
temp->num=i++;
temp->data= rand() % 50+1;//循环列表初始化,每个人的M随机赋值0—99
p->next=temp;
p=temp;
}
temp->next=head->next;//最后一个指向第一个结点,最开始的舍去
}
free(head);
return temp->next;
}
void main()
{
node *temp;
int i,n=50,temp_M;//50个人
node *p=create(n);
printf("num\tM\n");
for(i=0;i<50;i++)
{
printf("%d\t%d\n",p->num,p->data);
p=p->next;
}
printf("\n\n");
temp_M=p->data;
while(p!=p->next)
{
for(i=1;i<temp_M-1;i++)
{
p=p->next;
}
temp_M=p->next->data;
printf("%d->",p->next->num);
temp=p->next;//删除第temp_M个结点
p->next=temp->next;
free(temp);
p=p->next;
}
printf("%d\n",p->data);
return 0;
}
页:
[1]