美文网首页
循环队列的基本操作

循环队列的基本操作

作者: mark_x | 来源:发表于2019-08-19 17:37 被阅读0次
  • 判断队列是否已满:
    (Q->rear+1)%MAX == (Q->front)
  • 判断是否为空:
    Q->rear == Q->front
  • 元素入队,尾指针后移
    Q->rear = (Q->rear + 1) % MAX
  • 元素出队,头指针后移
    Q->front = (Q->front) + 1 % MAX
  • 计算队列长度
    (Q.rear - Q.front + MAX) % MAX
#include <stdio.h>

#define MAX 6

typedef struct
{
    int data[MAX];
    int front;   // 头指针
    int rear;   // 尾指针
}SqQueue;

void InitQueue(SqQueue *Q)
{
    Q->front = 0;
    Q->rear = 0;
}

int QueueLength(SqQueue Q)
{
    return (Q.rear - Q.front + MAX) % MAX;
}

void EnQueue(SqQueue *Q, int e)
{
    // 判断队列是否已满
    if ((Q->rear +1) % MAX == Q->front)
    {
        printf("队列已满!\n");

    }
    Q->data[Q->rear] = e;  // 在队尾加入新元素
    Q->rear = (Q->rear + 1) % MAX;  // 若到最后则转到数组头部
}

void DeQueue(SqQueue *Q, int *e)
{
    if (Q->front == Q->rear)
    {
        printf("队列为空!\n");
    }
    *e = Q->data[Q->front];
    Q->front = (Q->front + 1) % MAX;
}

int main(void)
{
    // 初始化循环队列
    SqQueue queue;
    InitQueue(&queue);
    
    // 循环队列求队列长度
    int q_length = QueueLength(queue);
    printf("循环队列长度为:%d\n", q_length);
    
    // 循环队列的入队操作
    EnQueue(&queue, 3);
    EnQueue(&queue, 520);
    printf("循环队列长度为:%d\n", QueueLength(queue));
    
    // 循环队列出队操作
    int num;
    DeQueue(&queue, &num);
    printf("出队元素为:%d\n", num);
    DeQueue(&queue, &num);
    printf("出队元素为:%d\n", num);
    
    
    return 0;
}

相关文章

  • 循环队列的基本操作

    判断队列是否已满:(Q->rear+1)%MAX == (Q->front) 判断是否为空:Q->rear == ...

  • 数据结构与算法(四)队列和Java ArrayDeque

    本文主要包括以下内容: 队列基本概念 队列的相关操作 队列的顺序存储 循环队列 队列的链式存储 Java Link...

  • 信息学奥赛系列教程:循环队列

    循环队列: 上一次介绍了队列的基本概念、性质和操作,本次介绍循环队列。 用一个数组,加分别指向队首,队尾的指针,实...

  • LeetCode 622. 设计循环队列

    622. 设计循环队列 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原...

  • leetcode 622 循环队列设计

    要求:设计实现循环队列循环队列定义:队尾指向队首;构造:设置一个长度为k的循环队列;要求的操作:取队首队尾/插入/...

  • 队列

    文章结构 什么是队列 实现队列顺序队列链式队列循环队列 Java中的队列 1. 什么是队列 队列也是一种操作受限的...

  • 队列表示与操作实现

    一、顺序队列表示与操作实现1.1 定义常量及结构 1.2 循环队列方法实现 二、链队列表示与操作实现2.1 定义常...

  • iOS、for循环里的异步任务完成再进行其他操作

    for循环里的异步任务完成再进行其他操作 队列组处理for循环里的异步任务

  • 循环链表

    应用循环链表可以用于管理计算机的计算资源,还可以用于实现栈和队列 Java代码实现基本操作

  • 数据结构题目34:顺序队列的操作

    顺序队列的操作有以下基本操作: 初始化一个队列 测试队列是否为空 取当前队头元素 队列的插入(进队) 队列的删除(...

网友评论

      本文标题:循环队列的基本操作

      本文链接:https://www.haomeiwen.com/subject/mtbjsctx.html