• 数据结构实验七——循环队列


    #include <stdio.h>
    #include <stdlib.h>
    #define M 100
    int flag=0;
    typedef struct SqQueue
    {
        char *base;
        int front;
        int rear;
    }SqQueue;
    void InitQueue(SqQueue *Q)
    {
        Q->base=(char *)malloc(M*sizeof(char));
        if(!Q->base)
            exit(-1);
        Q->front=Q->rear=0;
    }
    void CreateQueue(SqQueue *Q)
    {
        int len,i;
        char ch;
        printf("请输入队长:
    ");
        scanf("%d",&len);
        while(len<1||len>M)
        {
            printf("输入队长不符合要求,请输入队长:
    ");
            scanf("%d",&len);
        }
        for(i=0;i<len;i++)
        {
            printf("请输入入队元素:
    ");
            scanf("%c",&ch);
            if((ch=getchar())!='
    ')
                Q->base[Q->rear++]=ch;
        }
        flag=1;
    }
    void EnQueue(SqQueue *Q)
    {
        if((Q->rear+1)%M==Q->front)
            printf("队列已满,无法进行入队操作!
    ");
        else
        {
            char ch;
            printf("请输入如队列元素:
    ");
            scanf("%c",&ch);
            if((ch=getchar())!='
    ')
            {
                Q->base[Q->rear]=ch;
                Q->rear=(Q->rear+1)%M;
            }
        }
    }
    void DeQueue(SqQueue *Q)
    {
        if(Q->front==Q->rear)
            printf("循环队列已空,无法进行出队操作!
    ");
        else
        {
            char e=Q->base[Q->front];
            Q->front=(Q->front+1)%M;
            printf("出队元素为:%c
    ",e);
        }
    }
    int LengthQueue(SqQueue Q)
    {
        return (Q.rear+M-Q.front)%M;
    }
    void EmptyQueue(SqQueue Q)
    {
        if(Q.front==Q.rear)
            printf("队列为空!
    ");
        else
            printf("队列不为空!
    ");
    }
    void DisplayQueue(SqQueue Q)
    {
        int i;
        if(Q.front==Q.rear)
            printf("循环队列为空,不能输出!
    ");
        else
        {
            for(i=Q.front;i<Q.front+LengthQueue(Q);i++)
                printf("%2d	%2c
    ",i+1,Q.base[i%M]);
        }
    }
    void DestroyQueue(SqQueue *Q)
    {
        if(!Q->base)
            printf("循环队列已经被销毁!
    ");
        else
        {
            free(Q->base);
            Q->front=Q->rear=0;
            flag=0;
        }
    }
    
    
    void menu()
    {
        printf("	循环队列基本实验操作
    ");
        printf("*********************************
    ");
        printf("1 建立循环队列!		*
    ");
        printf("2 循环队列入队操作!		*
    ");
        printf("3 循环队列出队操作!		*
    ");
        printf("4 求循环队列长度!		*
    ");
        printf("5 判断队列是否为空!		*
    ");
        printf("6 显示队列!			*
    ");
        printf("7 销毁队列!			*
    ");
        printf("0 退出程序!			*
    ");
        printf("*********************************
    ");
    }
    int main()
    {
        int select;
        SqQueue Q;
        InitQueue(&Q);
        while(1)
        {
            menu();
            printf("请输入要选择的命令:
    ");
            scanf("%d",&select);
            switch(select)
            {
            case 1:
                if(flag==1)
                    printf("循环链队列已经创建!
    ");
                else
                    CreateQueue(&Q);
                break;
            case 2:
                if(flag==0)
                    printf("循环队列未创建,无法进行如入队操作!
    ");
                else
                    EnQueue(&Q);
                break;
            case 3:
                if(flag==0)
                    printf("循环队列未创建,无法进行如出队操作!
    ");
                else
                    DeQueue(&Q);
                break;
            case 4:
                if(flag==0)
                    printf("循环队列未创建,无法计算队长度!
    ");
                else
                    printf("循环队列的长度为:%d
    ",LengthQueue(Q));
                break;
            case 5:
                if(flag==0)
                    printf("循环队列未创建,无法判断队列是否为空!
    ");
                else
                    EmptyQueue(Q);
                break;
            case 6:
                if(flag==0)
                    printf("循环队列未创建,无法显示队列!
    ");
                else
                    DisplayQueue(Q);
                break;
            case 7:
                if(flag==0)
                    printf("循环队列未创建,无法进行销毁队列操作!
    ");
                else
                    DestroyQueue(&Q);
                break;
            case 0:
                exit(1);
                break;
            default :
                printf("命令输入有误,请重新输入!
    ");
                break;
            }
        }
        return 0;
    }
    

  • 相关阅读:
    PHP开发环境的搭建
    ios请求服务器数据 ASIHTTPRequest
    Android 调用GPS
    C语言学习规划
    weifenluo与notifyIcon小细节
    初涉Ribbon界面简单编程——图书管理系统——基于MFC+vs2010+win7。
    多线程编程之二——MFC中的多线程开发(转)
    类 StringTokenizer
    表单中Readonly和Disabled的区别
    研究了下Ajax,写了个处理Ajax函数
  • 原文地址:https://www.cnblogs.com/abc-24990/p/4257506.html
Copyright © 2020-2023  润新知