美文网首页
无标题文章

无标题文章

作者: TDKDPIKA | 来源:发表于2016-11-27 21:19 被阅读0次

    #include<stdio.h>
    #include<malloc.h>
    #include<windows.h>

    #define MaxSize 50

    //构造环形队列的数据类型

    typedef char ElemType;

    struct queue
    {
     ElemType data[MaxSize];//顺序存储数据元素
     int front,rear;//分别是队首队尾的指示器

    };

    typedef struct queue Queue;
    /*
    函数功能:InitQueue,初始化空队列
    函数形参:Queue *&Q
    函数返回值:无
    */
    void InitQueue(Queue *&Q)
    {
     //初始化空队列,申请起始地址,并初始化两个指示器的位置
     Q=(Queue *)malloc(sizeof(Queue));
     Q->front=Q->rear=0;
    }
    /*
    函数功能:QueueEmpty,1代表空队列,0代表非空队列
    函数形参:Queue *Q
    函数返回值:int
    */
    int QueueEmpty(Queue *Q)
    {
     return (Q->front==Q->rear);
    }
    /*
    函数功能:enQueue 入队
    函数形参:Queue*Q,ElemType e入队元素值
    函数返回值:若队满则返回0表示入队失败,否则返回1,入队成功
    */
    int enQueue(Queue *Q,ElemType e)
    {
     //判断队是否满
     if((Q->rear+1)%MaxSize==Q->front) return 0;//入队失败
     //入队,队尾指示器加1,元素入队
     Q->rear=(Q->rear+1)%MaxSize;
     Q->data[Q->rear]=e;
     return 1;//入队成功
    }
    /*
    函数功能:deQueue,出队
    函数形参:Queue *Q,ElemType &e临时存放被出队元素
    函数返回值:若队空则返回0表示出队失败,否则返回1,出队成功
    */
    int deQueue(Queue *Q,ElemType &e)
    {
     //判断队是否空
     if(Q->front==Q->rear) return 0;
     //出队
     //e=Q->data[(Q->front+1)%MaxSize];
     Q->front=(Q->front+1)%MaxSize;
     e=Q->data[Q->front];
     return 1;//出队成功
    }
    /*
    函数功能:DestroyQueue 释放内存
    函数形参:Queue *Q
    函数返回值:无
    */
    void DestroyQueue(Queue *&Q)
    {
     free(0);
     Q=NULL;
    }
    /*
    函数功能:DispQueue从队首到队尾打印所有元素
    函数形参:Queue *Q
    函数返回值:无
    */
    void DispQueue(Queue *&Q)
    {
     int i;
     for(i=Q->front;i<Q->rear;i++)
      printf("%c ",Q->data[i+1]);
     printf("\n");
    }

    void QueueLength(Queue *Q,int &a)
    {
     a=(Q->rear-Q->front+MaxSize)%MaxSize;
    }


    int main()
    {
     Queue *Q;ElemType e,a;int b;
     printf("(1)环形队列初始化。。。\n");InitQueue(Q);
     printf("(2)环形队列当前状态是:");
     if(QueueEmpty(Q)==1) printf("空队\n");
     else                 printf("非空队\n");
     printf("(3)元素入队\n");
     if(enQueue(Q,'A')==1) printf("入队成功\n");
     else                 printf("入队失败\n");
     if(enQueue(Q,'B')==1) printf("入队成功\n");
     else                 printf("入队失败\n");
     if(enQueue(Q,'C')==1) printf("入队成功\n");
     else                 printf("入队失败\n");
     printf("(4)环形队列当前状态是:");
     if(QueueEmpty(Q)==1) printf("空队\n");
     else                 printf("非空队\n");
     printf("打印元素\n");DispQueue(Q);
     printf("统计长度\n");QueueLength(Q,b);
     printf("%d",b);
     printf("(5)元素出队");
     if(deQueue(Q,e)==1) printf("出队成功,出队元素为:%c\n",e);
     else                printf("出队失败");
     printf("(6)销毁队列\n");DestroyQueue(Q);
     system ("PAUSE");
     return 0;
    }

    相关文章

      网友评论

          本文标题:无标题文章

          本文链接:https://www.haomeiwen.com/subject/dhmnpttx.html