循环队列
//问题描述:
// 已经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) 编辑 收藏 举报