循环队列

//问题描述:
// 已经n个人(1,2,3,。。。n)围坐圆桌,从编号为k的人报数,报到m那个人出列;
//  他下一个人又从K开始招数,报到m那个人出列;重复直到圆桌周围人全部出列。
//输出结果:
// 1
//2
//3
//
//4
//Delete----5
//Delete----7
//Delete----9
//Delete----11
//Delete----13
//Delete----2
//Delete----4
//Delete----8
//Delete----12
//Delete----3
//Delete----10
//Delete----6
//Delete----1
//
//循环队列,依次删除
#include <stdio.h>
#include
<stdlib.h>

typedef
struct Node{
int num;
Node
* pNext;
}Node,
* LinkList;

void Foo(int n, int k, int m)
{
LinkList p, cur,rear;
p
=(LinkList)malloc(sizeof(Node));
p
->num =1;
p
->pNext =p;
rear
=p;
for(int i=2; i<=n; i++)
{
Node
* temp=(Node*)malloc(sizeof(Node));
temp
->num =i;
rear
->pNext =temp;
temp
->pNext=p;
rear
=temp;
}
//Node *t=p;
//while(n--)
//{
// printf("%d ",t->num);
// t=t->pNext;
//}
//printf("\n");
cur=p;
for(int i=1; i<k; i++)
{
printf(
"%d\n",cur->num);
cur
=cur->pNext;
}
printf(
"\n%d\n", cur->num);
Node
* del=NULL;
while(n--)
{
for(int i=1; i<m-1; i++, cur=cur->pNext);
del
= cur->pNext;
cur
->pNext = del->pNext;
cur
=cur->pNext;
printf(
"Delete----%d\n",del->num);
del
->pNext =NULL;
free(del);
}
}

int main()
{
Foo(
13,4,2);
system(
"pause");
}

posted on 2011-09-20 23:07  Lovell Liu  阅读(291)  评论(0编辑  收藏  举报

导航