首页 > 其他分享 >队列——顺序存储

队列——顺序存储

时间:2024-05-26 19:31:09浏览次数:17  
标签:return 队列 SqQueue int MaxSize front 顺序存储 rear

核心思路:

1、使用顺序存储的方式定义队列时,使用数组存储队列元素,然后声明两个int类型的指针——rear和front,分别指向队尾元素的下一个位置和队头元素的位置。
2、初始化队列时,队列的首尾指针都指向0 。
3、当队列为空时,队尾和队头指针指向同一个位置(不一定等于0)。
4、队满条件:(Q.rear+1)%MaxSize==Q.front
5、执行入队操作,首先需要判断队满,然后先将入队元素放入队尾指针指向的位置,再把队尾指针向后移动(Q.rear=(Q.rear+1)%MaxSize)。
6、执行出队操作,首先需要判断队空,然后把队头指针向后移动(Q.front=(Q.front+1)%MaxSize)。

代码:

#include<stdio.h>
#define MaxSize 10

//定义
typedef struct{
    int data[MaxSize];
    int rear,front;    //队尾指针rear指向队尾元素的下一个位置,队头指针front指向队头元素 
}SqQueue;

//初始化 
void InitQueue(SqQueue &Q){
    Q.front=Q.rear=0;
}

//判断队空
bool QueueEmpty(SqQueue Q){
    if(Q.front==Q.rear)
        return true;
    else 
        return false;
} 

//判断队满,(队列的最后一个位置不存储元素 )
bool QueueFull(SqQueue Q){
    if((Q.rear+1)%MaxSize==Q.front)
        return true;
    else
        return false;
} 

//入队
bool EnQueue(SqQueue &Q,int x){
    if((Q.rear+1)%MaxSize==Q.front)        //判断队满 
        return false;
        
    Q.data[Q.rear]=x;
    Q.rear=(Q.rear+1)%MaxSize;
    return true; 
} 

//出队
bool DeQueue(SqQueue &Q,int &x){
    if(Q.front==Q.rear)        //判断队空 
        return false;
        
    x=Q.data[Q.front];
    Q.front=(Q.front+1)%MaxSize;
    printf("元素%d出队\n",x);
    return true;
}

//读队头元素
int GetHead(SqQueue Q,int &x){
    if(Q.front==Q.rear)        //判断队空 
        return false;
        
    x=Q.data[Q.front];
    printf("队头元素为%d\n",x);
    return 0;
} 

int main(){
    int x;
    SqQueue Q;
    InitQueue(Q);
    EnQueue(Q,1);
    EnQueue(Q,2);
    GetHead(Q,x);
    DeQueue(Q,x);
    GetHead(Q,x);
    return 0;
}

标签:return,队列,SqQueue,int,MaxSize,front,顺序存储,rear
From: https://blog.csdn.net/qq_46137895/article/details/139219114

相关文章

  • 队列——链式存储
    核心思路:1、首先定义队列结点,包含数据域和指针域;然后定义链式队列,包含队列节点类型的队头和队尾指针。2、初始化:带头结点:给头结点分配内存,然后队头和队尾指针指向头结点,同时队头指针的next指向NULL。不带头结点:队头和队尾指针都指向NULL。3、入队:......
  • aardio 队列
    1//queue队列结构2//队列的特点:先进先出3importconsole;4classqueueEx{5ctor(){6this.items={}7};8//排队9入队=function(element){10..table.push(this.items,element);11}12//出列13出队......
  • Java队列简介
    在现代应用程序开发中,队列是一种常见且强大的数据结构,用于存储和管理待处理的任务序列。结合MySQL数据库,我们可以利用队列实现任务的持久化存储与高效处理。本文将通过四个案例,详细介绍如何在Java中使用队列,并结合MySQL数据库实现数据的存储与检索,涵盖基础队列操作、消息队列......
  • 【数据结构】栈和队列
    栈和队列栈栈的实现stack.h文件stack.c文件队列队列的实现queue.h文件queue.c文件栈栈:一种特殊的线性表,其中允许在固定的一端进行插入和删除元素操作,进行数据插入和删除操作的一段称为栈顶,另一端称为栈底,栈中的数据元素遵守后进先出的原则LIFO(lostinfirstout)......
  • 软考高级之redis中使用zset实现延迟队列,你答对了么?
    实现延迟队列的思路zset的特性,带有分数的排序,以时间戳作为分数进行排序添加任务zdd取出任务zrangbyscore执行任务zrem定时任务publicstaticvoidmain(String[]args){Jedisjedis=newJedis("ip",6379);TimerTasktask=newTimerTask()......
  • 栈和队列4 顺序栈的应用实例(迷宫求解)
    #include<stdio.h>#include<stdlib.h>#defineINITSIZE100#defineINCREAMENT10#defineM8#defineN8typedefstruct{   intx;   inty;}PosType;typedefstruct{   intord;   PosTypeseat;   intdi;}SElemType;typedefstructS......
  • 【数据结构】栈和队列
    个人主页~栈和队列一、栈1、概念2、栈的实现Stack.hStack.ctest.c二、队列1、概念2、队列的实现Queue.hQueue.ctest.c三、深入了解栈和队列的特性1、用队列实现栈2、用栈实现队列3、循环队列一、栈1、概念栈是一种特殊的线性表,只允许在固定的一端进行插入和......
  • Redis Stream消息队列
    工具类部分内容packagecom.hwd.campus.common.redis.utils;importcom.hwd.campus.common.redis.constant.RedisKeyPrefixConst;importcom.hwd.campus.common.redis.service.RedisListSelect;importcom.hwd.campus.common.redis.service.RedisSelect;importlombok.AllA......
  • 数组类型的有界阻塞队列-ArrayBlockingQueue
    一:ArrayBlockingQueue简介  一个由循环数组支持的有界阻塞队列。它的本质是一个基于数组的BlockingQueue的实现。它的容纳大小是固定的。此队列按FIFO(先进先出)原则对元素进行排序。队列的头部是在队列中存在时间最长的元素。队列的尾部是在队列中存在时间最短的元素。......
  • 单调队列&&滑动窗口
    单调队列(MonotonicQueue)是一种特殊的数据结构,可以在常数时间内进行一系列操作,如插入元素、删除元素和获取最大值或最小值。单调队列通常用于解决滑动窗口类问题,其中需要在窗口中维护一些特定性质,例如最大值、最小值或其他聚合函数的值。它具有以下特性:单调性质:单调队列中......