宝元码 发表于 2015-12-5 22:05:16

做不出来,求教

队列报数问题;
问题描述:求解报数问题
      设有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++;
        }
}

damingdingdin 发表于 2015-12-6 10:02:16

帮你写了份伪代码
i=1
while(QueueEmpty(Q))//当队列不空
{
    if(i%2==1)//奇数
    {
      DeQueue(Q,&elem);//出列
      print elem;
    }
    else//偶数
    {
      DeQueue(Q,&elem); //出列
      EnQueue(Q,&elem);//进入最右边
    }
    i++;//下一个人报数
}
页: [1]
查看完整版本: 做不出来,求教