利用队列求解报数问题。设有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; } |
数据结构实验四——队列
最新推荐文章于 2024-07-17 17:16:42 发布