数据结构实验四——队列

利用队列求解报数问题。设有n个人站成一排,从左向右的编号分别为1~n,现在从左往右报数“1,2,1,2,…”,数到“1”的人出列,数到“2”的立即站到队伍的最右端。报数过程反复进行,直到n个人都出列为止。要求给出他们的出列顺序。

//LQueue.h

#include<stdio.h>

#include<malloc.h>

#define MaxSize 100

typedef int ElemType;

typedef struct

{

  ElemType data[MaxSize];     //存放队中元素

  int front,rear;             //队头和队尾指针

}LqQueue;

//初始化队列

void InitQueue(LqQueue *&lq)

{

  lq=(LqQueue *)malloc(sizeof(LqQueue));

  lq->front=lq->rear=0;

}

//进队

bool enQueue(LqQueue *&lq,ElemType e)

{

  if((lq->rear+1)%MaxSize==lq->front)

     return false;

  lq->rear = (lq->rear+1)%MaxSize;

  lq->data[lq->rear] = e;

  return true;

}

//出队

bool deQueue(LqQueue *&lq,ElemType &e)

{

  if(lq->front==lq->rear)

     return false;

  lq->front=(lq->front+1)%MaxSize;

  e=lq->data[lq->front];

  return true;

}

//判队列是否为空

bool QueueEmpty(LqQueue *lq)

{

  return (lq->front==lq->rear);

}

//销毁队列

void DestroyQueue(LqQueue *&lq)

{

  free(lq);

}

//main.cpp

#include<stdio.h>

#include"LQueue.h"

//报数

void Baoshu(int n)

{

  int i;

  int count=1;             //count用来记第几个元素

  LqQueue *lq;

  InitQueue(lq);

  for(i=1;i<=n;i++)

  {

     enQueue(lq,i);

  }

  while(!QueueEmpty(lq))

  {

     deQueue(lq,i);

     if(count%2==0)           //第偶数个元素时,进队

         enQueue(lq,i);

     else

         printf("%d ",i);  //第奇数个元素时,出队输出

     count++;

  }

  printf("\n");

  DestroyQueue(lq);

}

int main(void)

{

  int n;

  printf("请输入n位同学:");

  scanf("%d",&n);

  Baoshu(n);

  return 0;

}

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值