(rear+1)%size=front;
1.循环队列
//n为总人数,k为第一个开始报数的人,m为出列者喊到的
typedef struct LNode
{
int data;
struct LNode* next;
}LNode;
void JOSEPHUS(int n,int k,int m)
{
LNode* p,* r,*head=NULL;
//建立循环链表
for(i=1;i<=n;i++)
{
p = (LNode*)malloc(sizeof(LNode));
p->data=i;
if(head==NULL)
head = p;
else
r->next =p;
r= p;
}
p->next = head;
p = head;
for(i=0;i<k;i++)
{
r =p;
p = p->next;
}
while(p->next != p)
{
for(i=0;i<m;i++)
{
r = p;
p = p->next;
}
r->next =p->next;
free(p);
p=r->next;
}
printf("\n最后被删除的元素是:%4d",P->data);
}
循环队列队列满的条件是:
(rear+1)%size == front
循环队列size
(rear-front+size)%size