|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
队列报数问题;
问题描述:求解报数问题
设有n个人站成一排,从左向右的编号分别为1~n,现在从左往右报数“1,2,1,2……”,数到“1”的人出列,数到“2”的立即站到队伍的最右端。报数过程反复进行,直到n个人都出列为止。要求给出他们的出列顺序。
例如:n=8,初始序列:1,2,3,4,5,6,7,8
出队顺序为:1,3,5,7,2,6,4,8
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct QNode
{
ElemType data;
struct QNode *next;
}QNode,*Queueprt;
typedef struct
{
Queueprt front,rear,lpp;
}LinkQueue;
LinkQueue *create(int n)
{
LinkQueue *q;
LinkQueue *p;
int i=1;
q->front=q->rear=(Queueprt)malloc(sizeof(QNode));
if(0!=n)
{
while(i<=n)
{
p->lpp=(Queueprt)malloc(sizeof(QNode));
p->lpp->data=i++;
q->rear->next=p->lpp;
q->rear=p->lpp;
}
p->lpp->next=q->front->next;
free(q->front);
return p->lpp->next;
}
}
main()
{
int n=8;
int i=1;
LinkQueue *q=create(n);
LinkQueue *p;
while(q->lpp!=q->lpp->next)
{
if(i%2!=0)
{
printf("%d->",q->lpp->data);
}else{
q->lpp=q->lpp->next;
free(q->lpp);
}
i++;
}
}
帮你写了份伪代码
i=1
while(QueueEmpty(Q))//当队列不空
{
if(i%2==1)//奇数
{
DeQueue(Q,&elem);//出列
print elem;
}
else//偶数
{
DeQueue(Q,&elem); //出列
EnQueue(Q,&elem);//进入最右边
}
i++;//下一个人报数
}
|
-
|