队列——课上练

创建空的环形队列:要求按照完成顺序队列的数据类型定义,并初始化一个空的顺序队列。

队列为空判断:当队列中无数据元素时队列为空,队列为空时不能进行出队操作。本关任务是完成判断环形队列是否为空。

队列为满判断:顺序队列存储数据元素的个数由队列存储容量MAXNUM决定,当队列中存放的数据元素个数已达最大时,不能再向队列中插入数据元素(入队)以防止上溢。要求完成判断环形队列是否为满的操作。

入队:实现队列的插入操作(入队)。

出队:实现队列删除操作(出队)。队列操作特性是:删除只能在队首进行,本操作要求删除队首元素并返回删除的元素。

取队首元素:返回队首元素。

#include <stdio.h>
#include <stdlib.h>

/* 此处是顺序队列数据结构定义 */
typedef int DataType;
struct seqQueue // 顺序队列结构体
{
    int front, rear;    // 用于存放顺序队列的队首和队尾索引
    int MAXNUM;         // 用于记录顺序队列中能存放的最大元素个数
    DataType *element;  // 用于存放数据元素的连续空间的起始地址
};

typedef struct seqQueue *PseqQueue;

// 第一关:创建一个空的顺序队列
PseqQueue createNullQueue_seq(int m)
{
    // 此处填写代码,创建一个空的顺序队列,能存放的最大元素个数为 m
    // 若 m=0,则返回 NULL
    PseqQueue Q = (PseqQueue)malloc(sizeof(struct seqQueue));
    if (Q)
    {
        if (m == 0)
            return NULL;
        Q->element = (DataType *)malloc(sizeof(DataType) * m);
        if (Q->element)
        {
            Q->front = Q->rear = 0;
            Q->MAXNUM = m;
            return Q;
        }
        else
            free(Q);
    }
    return 0;
}

// 第二关:判断顺序队列是否为空
int isNullQueue_seq(PseqQueue Q)
{
    // 判断顺序(环形)队列是否为空,若为空,返回值为 1,否则返回值为 0
    // 若队列不存在,则返回 -1
    if (Q == NULL)
        return -1;
    else if (Q->front == Q->rear)
        return 1;
    else
        return 0;
}

// 第三关:判断环形队列是否已满
int isFullQueue_seq(PseqQueue Q)
{
    // 判断环形队列是否已满,若已满,返回值为 1,否则返回值为 0
    if ((Q->rear + 1) % Q->MAXNUM == Q->front)
        return 1;
    return 0;
}

// 第四关:在环形队列中插入数据元素
int enQueue_seq(PseqQueue Q, DataType x)
{
    // 在环形队列中插入数据元素 x,若插入不成功,返回 0;插入成功返回值为 1
    if ((Q->rear + 1) % Q->MAXNUM == Q->front)
        return 0;
    Q->element[Q->rear] = x;
    Q->rear = (Q->rear + 1) % Q->MAXNUM;
    return 1;
}

// 第五关:出队并返回删除元素
DataType delQueue_seq(PseqQueue Q)
{
    // 出队并返回删除元素,若队列为空,则返回 -1
    if (Q->front == Q->rear)
        return -1;
    Q->front = (Q->front + 1) % Q->MAXNUM;
    return Q->element[Q->front - 1];
}

// 第六关:取队首元素返回
DataType front_seq(PseqQueue Q)
{
    // 取队首元素返回,若队列为空,则返回 -1
    if (Q->front == Q->rear)
        return -1;
    return Q->element[Q->front];
}

这段代码实现了以下功能:

  1. 创建空的顺序队列:PseqQueue createNullQueue_seq(int m)

    • 创建一个空的顺序队列,能存放的最大元素个数为 m
    • m=0,返回 NULL
    • 返回指向顺序队列的指针。
  2. 判断顺序队列是否为空:int isNullQueue_seq(PseqQueue Q)

    • 判断顺序队列是否为空。
    • 若为空,返回值为 1,否则返回值为 0
    • 若队列不存在(指针为空),返回 -1
  3. 判断环形队列是否已满:int isFullQueue_seq(PseqQueue Q)

    • 判断环形队列是否已满。
    • 若已满,返回值为 1,否则返回值为 0
  4. 在环形队列中插入数据元素:int enQueue_seq(PseqQueue Q, DataType x)

    • 在环形队列中插入数据元素 x
    • 若插入不成功(队列已满),返回 0;插入成功返回值为 1
  5. 出队并返回删除元素:DataType delQueue_seq(PseqQueue Q)

    • 出队并返回删除元素。
    • 若队列为空,返回 -1
  6. 取队首元素返回:DataType front_seq(PseqQueue Q)

    • 取队首元素返回。
    • 若队列为空,返回 -1
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值