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;
    }
  • 相关阅读:
    字符串转数字,不用系统自带函数
    Hibernate事务与并发问题处理(乐观锁与悲观锁)【转】
    替代Oracle的minus写法
    随机算法
    获取在线时间 (Java Socket)
    在Asp.net中为用户控件(.ascx)添加自定义属性详解
    oracle查询多行数据合并成一行数据
    JS Math.sin() 与 Math.cos() 用法
    [BeiJing2006]狼抓兔子
    [HNOI2008]明明的烦恼
  • 原文地址:https://www.cnblogs.com/xzt6/p/5991459.html
Copyright © 2011-2022 走看看