zoukankan      html  css  js  c++  java
  • 两种方法实现队满和队空的判断操作(循环队列)

    本周的作业要求:

    1.给出循环队列的存储结构定义。
    2.完成循环队列的基本操作函数。
             1)      初始化循环队列;
             2)      建立循环队列;
             3)      实现入队和出队操作;
             4)     采用下面两种方法实现对满和队空的判断操作:
       方法一:修改队满条件,浪费一个元素空间,队满时数组中只有一个空闲单元(必做);
       方法二:设置标志flag,当front==rear且flag=0时为队空,当front==rear且flag=1时为队满(必做);
     
    3.编写主函数实现基本操作函数功能,并设置测试数据,测试合法和非法数据的输出结果;
    4.程序调试运行并保存输出结果;
    5.提交实验作业。
     

    方法一:修改队满条件,浪费一个元素空间,队满时数组中只有一个空闲单元(必做);

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #define MAXSIZE 50
    typedef struct
    {
        char a[MAXSIZE];
        int front;
        int rear;
    }SeqQueue;
    
    int flag=0;
    
    void deng(SeqQueue *Q);
    
    void duiman(SeqQueue *Q)
    {
        printf("队满,插入失败,返回登录界面
    ");
        deng(Q);
    }
    
    void duikong(SeqQueue *Q)
    {
        printf("队空,无元素出队,返回登陆界面
    ");
        flag=0;
        deng(Q);
    }
    
    void EnterQueue(SeqQueue *Q,char x)
    {
        if((Q->rear +1)%MAXSIZE==Q->front)
            duiman(Q);
        Q->a[Q->rear]=x;
        Q->rear=(Q->rear+1)%MAXSIZE;
        return;
    }
    
    void DeleteQueue(SeqQueue *Q)
    {
        char x;
        if(Q->front==Q->rear)
            duikong(Q);
        x=Q->a[Q->front];
        Q->front=(Q->front+1)%MAXSIZE;
        if(flag==0){
            flag=1;
            DeleteQueue(Q);
        }else
            printf("出队的队头元素为%c
    ",x);
        deng(Q);
    }
    
    void ru(SeqQueue *Q)
    {
        printf("输入入队元素以$结束
    ");
        char En[MAXSIZE];
        int i;
        for(i=0;i<MAXSIZE;i++){
            scanf("%c",&En[i]);
            if(En[i]!='$'){
                EnterQueue(Q,En[i]);
            }
            else
                break;
        }
        printf("入队成功!
    ");
        deng(Q);
    }
    
    void InitQueue(SeqQueue *Q)
    {
        Q->front=Q->rear=0;
    }
    
    void deng(SeqQueue *Q)
    {
        printf("1.入队
    ");
        printf("2.使队头元素出队,并返回它的值
    ");
        printf("3.退出
    ");
        int a;
        scanf("%d",&a);
        switch(a)
        {
        case 1:
            system("CLS");
            ru(Q);
        case 2:
            system("CLS");
            DeleteQueue(Q);
        case 3:
            exit(0);
        default:
            printf("输入不合法,请重新输入
    ");
            deng(Q);
        }
    }
    
    
    int main()
    {
        SeqQueue Q;
        InitQueue(&Q);
        deng(&Q);
    
        return 0;
    }

    方法二:设置标志flag,当front==rear且flag=0时为队空,当front==rear且flag=1时为队满(必做);

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #define MAXSIZE 50
    typedef struct
    {
        char a[MAXSIZE];
        int front;
        int rear;
    }SeqQueue;
    
    int flag=0,tag=0;
    
    
    void deng(SeqQueue *Q);
    
    void duiman(SeqQueue *Q)
    {
        printf("队满,插入失败,返回登录界面
    ");
        deng(Q);
    }
    
    void duikong(SeqQueue *Q)
    {
        printf("队空,无元素出队,返回登陆界面
    ");
        flag=0;
        deng(Q);
    }
    
    void EnterQueue(SeqQueue *Q,char x)
    {
        if(tag==1&&Q->front==Q->rear)
            duiman(Q);
        Q->a[Q->rear]=x;
        Q->rear=(Q->rear+1)%MAXSIZE;
        return;
    }
    
    void DeleteQueue(SeqQueue *Q)
    {
        char x;
        if(tag==0&&Q->front==Q->rear)
            duikong(Q);
        x=Q->a[Q->front];
        Q->front=(Q->front+1)%MAXSIZE;
        if(flag==0){
            flag=1;
            DeleteQueue(Q);
        }else{
            tag=0;
            printf("出队的队头元素为%c
    ",x);
        }
        deng(Q);
    }
    
    void ru(SeqQueue *Q)
    {
        printf("输入入队元素以$结束
    ");
        char En[MAXSIZE];
        int i;
        for(i=0;i<MAXSIZE;i++){
            scanf("%c",&En[i]);
            if(En[i]!='$'){
                EnterQueue(Q,En[i]);
            }
            else
                break;
        }
        tag=1;
        printf("入队成功!
    ");
        deng(Q);
    }
    
    void InitQueue(SeqQueue *Q)
    {
        Q->front=Q->rear=0;
    }
    
    void deng(SeqQueue *Q)
    {
        printf("1.入队
    ");
        printf("2.使队头元素出队,并返回它的值
    ");
        printf("3.退出
    ");
        int a;
        scanf("%d",&a);
        switch(a)
        {
        case 1:
            system("CLS");
            ru(Q);
        case 2:
            system("CLS");
            DeleteQueue(Q);
        case 3:
            exit(0);
        default:
            printf("输入不合法,请重新输入
    ");
            deng(Q);
        }
    }
    
    
    int main()
    {
        SeqQueue Q;
        InitQueue(&Q);
        deng(&Q);
    
        return 0;
    }
  • 相关阅读:
    爱因斯坦谜题的真正答案
    Lucence 中的排序算法解析
    XML 解析中,如何排除控制字符
    如何在百度贴吧里加入自己的广告图片
    ASP.NET 不能调试的几种情况
    Zend_Search_Lucence 中用UTF8 编码建立索引的问题
    c++继承中的内存布局 <转>
    Effective C++ 学习笔记(20)
    Effective C++ 学习笔记(19)
    Effective C++ 学习笔记(17)
  • 原文地址:https://www.cnblogs.com/xzt6/p/5991459.html
Copyright © 2011-2022 走看看