第7周实践项目2.2 求解报数问题

来源:互联网 发布:嗨氏黑历史知乎 编辑:程序博客网 时间:2024/05/19 17:03
/*(1).问题描述:           n个人从左向右编号1~n,然后从左向右报数“1,2,1,2,1,2...”           数到1的人出队,数到2的人立即站到队列的最右端           继续报数,直到所有人出列(2) 数据组织:用一个队列解决出列问题,由于这里不需要已经出队后的元素,所以采用环形队列?????(3)设计算法:           1.全部入队           2.出队一个,输出编号           3.若队列不为空,再出队一个元素,并将刚出列的元素进队到队尾           */#include <stdio.h>#include <malloc.h>#define maxsize 10//不能开辟8个因为在用环形队列时maxsize=0时被舍弃了typedef struct{    int date[maxsize];    int front,rear;}sqqueue;void initqueue(sqqueue *&q){    q=(sqqueue *)malloc(sizeof(sqqueue));    q->front=q->rear=0;}bool enqueue(sqqueue *&q,int e){    if((q->rear+1)%maxsize==q->front)        return false;    q->rear=(q->rear+1)%maxsize;    q->date[q->rear]=e;    return true;}bool dequeue(sqqueue *&q,int &e){    if(q->front==q->rear)        return false;    q->front=(q->front+1)%maxsize;    e=q->date[q->front];    return true;}bool queueempty(sqqueue *q){    return (q->front==q->rear);}void destoryqueue(sqqueue *q){    free(q);}void number(int n){    int e;    sqqueue *q;    initqueue(q);    for(int i=1;i<=n;++i)        enqueue(q,i);        printf("报数出列顺序:");    while(q->front!=q->rear)//z这行后面开始多加了一个逗号,造成死循环。下面的程序是没有错误的    {      dequeue(q,e);        printf("%d",e);        if(!queueempty(q))        {            dequeue(q,e);            enqueue(q,e);        }    }       /* int m=8;        while(m--)        {            dequeue(q,e);            printf(" %d",e);                dequeue(q,e);                enqueue(q,e);        }*/        printf("\n");        destoryqueue(q);}int main(){    int n=8;    printf("初始序列:\n");    for(int i=1;i<=n;++i)        printf(" %d",i);    printf("\n");    number(n);    return 0;}#include <stdio.h>#include <malloc.h>#define Maxsize 8typedef struct{    int date[Maxsize];    int front,rear;}SqQueue;void num(int n){int i,e;SqQueue q;q.front=q.rear=0;for(i=1;i<=n;i++){q.rear=(q.rear+1)%Maxsize;q.date[q.rear]=i;}printf("报数出列顺序");while(q.front!=q.rear){q.front=(q.front+1)%Maxsize;e=q.date[q.front];printf("%d",e);if(q.front!=q.rear){q.front=(q.front+1)%Maxsize;    e=q.date[q.front];q.rear=(q.rear+1)%Maxsize;    q.date[q.rear]=e;}}printf("\n");}int main(){int i,n=8;printf("初始序列");for(i=1;i<=n;i++){printf("%d",i);}printf("\n");num(n);return 0;}

阅读全文
0 0
原创粉丝点击