• 顺序队列


    几点说明:

      1、队列是线性表的一种特殊情况

      2、队列只允许在一端进行插入元素,在另一端删除元素;插入元素的一端称为队尾(rear),删除元素的一端称为队首(front)

      3、队列的特点是“先进先出(FIFO)”

      4、为便于操作初始化队列时,约定front=rear=-1,即让对头指针与队尾指针均指向数组下标为0的空间的前一个位置,这样当插入或删除元素时,队尾或对头指针均向后移位即可

      5、在非空队列中,头指针front总是指向当前对头元素的前一个位置,尾指针rear总是指向当前队尾元素的位置

    1.序队列的数据结构(C语言描述)如下:

    #define MAXLEN 10    //定义队列的最大容量
    typedef int Datatype;   //数据类型
    typedef struct
    {
        Datatype data[MAXLEN];
        int front,rear;    //定义对头与队尾指针
    }SeQueue;

    2.列初始化:

    SeQueue InitSeQueue()   //队列初始化操作
    {
        SeQueue q;
        q.front=-1;
        q.rear=-1;
        return(q);
    }

    3.入队操作:

    int enterSeqQueue(SeQueue *q, int *x)    //入队操作
    {
        if(q->rear>=MAXLEN-1)  //队列已满,插入失败
            return(0);
        else
        {
            q->rear++;
            q->data[q->rear]=x;
            return(1);
        }
    }

    4.出队操作:

    int DelSeqQueue(SeQueue *q, int *x)     //出队操作
    {
        if(q->front==q->rear)   //队列为空,无元素可删除
            return(0);
        else
        {
            q->front++;
            *x=q->data[q->front];
            return(1);
        }
    }

    顺序队列的综合操作的完整程序如下:

    #include <stdio.h>
    #include <malloc.h>
    #include <stdlib.h>
    #define MAXLEN 10    //定义队列的最大容量
    typedef int Datatype;   //数据类型
    typedef struct
    {
        Datatype data[MAXLEN];
        int front,rear;    //定义对头与队尾指针
    }SeQueue;
    
    SeQueue InitSeQueue()   //队列初始化操作
    {
        SeQueue q;
        q.front=-1;
        q.rear=-1;
        return(q);
    }
    
    int Getfront_seq(SeQueue *q, int *x)   //获取队首元素
    {
        if(q->front==q->rear)
            return(0);
        else
        {
            *x=q->data[(q->front)+1];
            return(1);
        }
    }
    
    int enterSeqQueue(SeQueue *q, int *x)    //入队操作
    {
        if(q->rear>=MAXLEN-1)  //队列已满,插入失败
            return(0);
        else
        {
            q->rear++;
            q->data[q->rear]=x;
            return(1);
        }
    }
    
    int Empty_seq(SeQueue *q)                //判断队空
    {
        return(q->front==q->rear);
    }
    
    int DelSeqQueue(SeQueue *q, int *x)     //出队操作
    {
        if(q->front==q->rear)   //队列为空,无元素可删除
            return(0);
        else
        {
            q->front++;
            *x=q->data[q->front];
            return(1);
        }
    }
    
    void print(SeQueue q)
    {
        int n;
        if(q.front!=q.rear)
        {
            printf("队列的元素输出为: ");
            for(n=q.front+1;n<=q.rear;n++)
                printf("%d  ",q.data[n]);
        }
        else
            printf("队列为空!!");
        printf("
    ");
    }
    
    
    main()
    {
        SeQueue Myqueue;
        int n,y,z,i,j;
        Myqueue=InitSeQueue();
        if(Empty_seq(&Myqueue)!=0)
            printf("
    队列为空!");
        else
            printf("
    队列非空!");
        printf("
    请输入队列元素的数目: ");
        scanf_s("%d",&n);
        printf("请输入待入队的%d个元素:
    ",n);
        for(i=1;i<=n;i++)
        {
            scanf_s("%d",&y);
            enterSeqQueue(&Myqueue,y);
        }
        print(Myqueue);
        Getfront_seq(&Myqueue,&z);
        printf("当前队列的队头元素为: %d 
    ",z);
        print(Myqueue);
        printf("请输入出队元素个数j(j要小于n):
    ",n);
        scanf_s("%d",&j);
        for(i=1;i<=j;i++)
        {
            DelSeqQueue(&Myqueue,&z);
            printf("%d ",z);
        }
        printf("
    ");
        print(Myqueue);
        if(Empty_seq(&Myqueue)!=0)
            printf("
    队列为空!");
        else
            printf("
    队列非空!");
        system("pause");
    
    }

    结果为:

  • 相关阅读:
    ld: cannot find lgcc_s
    Ubuntu 12.10 图形显示未知
    awk分析Nginx日志中的cookie
    Ubuntu 10.04 WPS 问题汇总
    objc[20556]:Class JavaLaunchHelper is implemented in both xxx 警告处理
    在Linux安装配置Tomcat 并部署web应用 ( 三种方式 )
    Spring Boot 系列(二)单元测试&网络请求
    Java自定义注解
    Spring Boot 系列(一)快速入门
    Spring 自定义注解,配置简单日志注解
  • 原文地址:https://www.cnblogs.com/kkdd-2013/p/3185885.html
Copyright © 2020-2023  润新知