• 循环队列的实现


    循环队列

    #include<iostream.h>

    #include <stdlib.h>

    #include <malloc.h>

    #include<stdio.h>

    #define FALSE 0

    #define TRUE 1

    #define OK   1

    #define ERROR  0

    #define MAXSIZE 100

    typedef int QueueElementType;

    typedef struct

    {

        QueueElementType element[MAXSIZE];

        int front;

        int rear;

    }SeqQueue;

    //初始化

    int InitQueue(SeqQueue *Q)

    {

        Q->front=Q->rear=0;

        return(TRUE);

    }

    //入队

    int EnterQueue(SeqQueue *Q,QueueElementType x)

    {

        if((Q->rear+1)%MAXSIZE==Q->front)

            return(FALSE);

        Q->element[Q->rear]=x;

        Q->rear=(Q->rear+1)%MAXSIZE;

        return(TRUE);

    }

    //出队

    int DeleteQueue(SeqQueue *Q,QueueElementType *x)

    {

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

        return(FALSE);

        *x=Q->element[Q->front];

        Q->front=(Q->front+1)%MAXSIZE;

        return(TRUE);

    }

    //求长度

    int LengthQueue(SeqQueue *Q)

    {

       printf("%d",(Q->rear-Q->front+MAXSIZE) % MAXSIZE);

       printf(" ");

       return(TRUE);

    }

    //输出链表

    void PrintfQueue(SeqQueue *Q)

    {

        int j;

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

          cout<<"队列为空"<<endl;

        else

        {

            j=((Q->rear-Q->front+MAXSIZE) % MAXSIZE)-1;

            for(int i=0; i<=j; i++)

            printf("%d",Q->element[(Q->front+i)%MAXSIZE]);

            printf(" ");

        }

    }

    //判断循环队列是否为空或为满

    void JudgeQueue(SeqQueue *Q)

    {

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

        {

            printf("该队列为空");

            printf(" ");

        }

        else if((Q->rear+1)%MAXSIZE==Q->front)

        {

            printf("该队列为满");

            printf(" ");

        }

        else

        {

            printf("该队列既不为空也不为满");

            printf(" ");

        }

    }

    //销毁队列

    void DestroyQueue(SeqQueue *Q)

    {

       Q->front=Q->rear=0;

    }

    void main()

    {

           SeqQueue Q;

           InitQueue(&Q);

    int flag=1;

           printf("        ************^^^^^^^循环队列功能菜单^^^^^^^************");

           printf(" ");

     printf("请选择操作:");

            printf(" ");

            printf("1.入队操作");

            printf(" ");

            printf("2.出队操作");

            printf(" ");

            printf("3.判断队列空或满");

            printf(" ");

            printf("4. 求队列长度");

            printf(" ");

            printf("5.销毁队列");

            printf(" ");

            printf("6.退出");

            printf(" ");

             

     while(flag)

         {

           int x,e;

          

        cin>>e;

       switch(e){

    case 1:printf("请输入要入队的整型值:(限一个)");

           printf(" ");

              cin>>x;

              EnterQueue(&Q,x);

              printf("队列为:");

                PrintfQueue(&Q);

              break;

       case 2: DeleteQueue(&Q,&x);

               printf("队列为:");

               PrintfQueue(&Q);

               break;

       case 3:JudgeQueue(&Q);

               break;

       case 4:printf("链表长度为:");

               LengthQueue(&Q) ;

               break;

       case 5:DestroyQueue(&Q);

              printf("销毁成功!");

               break;

       case 6:flag=0;

               break;

     }

    }

     循环队列基本操作程序 - 匿名的宝贝 - STEP BY STEP

    转自:http://mickyxiahcdd.blog.163.com/blog/static/128243967200992003724101/

  • 相关阅读:
    为WCF增加UDP绑定(实践篇)
    WCF服务编程-基础
    Entity Framework 数据库先行、模型先行、代码先行
    C# FTP上传下载(支持断点续传)
    使用WCF上传文件
    MySQL · BUG分析 · Rename table 死锁分析
    MySQL · 物理备份 · Percona XtraBackup 备份原理
    MySQL · 答疑解惑 · MySQL 锁问题最佳实践
    MySQL · 特性分析 · MDL 实现分析
    MySQL · 引擎特性 · InnoDB 事务子系统介绍
  • 原文地址:https://www.cnblogs.com/wuyuankun/p/3741497.html
Copyright © 2020-2023  润新知