约瑟夫环
本人编了一个简单的程序,程序目的:25个人围成一圈,从第一个人开始报数,数到3或者3的倍数着出列,求最后出列的序号。但是没有运行处结果。程序如下:
#include <stdio.h>
#include <malloc.h>
struct tm
{
int num;
struct tm *next;
}*p,*q,*head;
void main()
{
int i;
head=NULL;
//建立循环链表
for(i=0;i<25;i++)
{
p=(struct tm *)malloc(sizeof(struct tm));
p->num=i;
if(head==NULL)
head=p;
else
q->next=p;
q=p;
}
p->next=head;
q=head;
依次删除应该出栈的元素
while(p->next!=p)
{
for(i=0;i<2;i++)
{
p=q;
p=p->next;
}
q->next=p->next;
printf("%4d",p->num);
free(p);
p=q->next;
}
printf("The last number is %d",p->num);
}
希望各位楼主指点一下,帮我找出其中的错误,谢谢.