首页 > 其他分享 >循环队列顺序表实现

循环队列顺序表实现

时间:2022-11-13 20:12:49浏览次数:45  
标签:顺序 return 队列 Queue MaxSize 循环 Front Rear

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

/** 循环队列的顺序存储实现
 队列头在队列第一个元素前 不指向元素
 队列尾是指向队列最后一个元素
 */
#define ERROR -1
#define ElementType int

typedef int Position;
struct QNode{
    ElementType *Data;
    Position Front, Rear; // 队列头尾指针
    int MaxSize; // 队列最大容量
};
typedef struct QNode *Queue;

Queue CreateQueue(int MaxSize){
    Queue Q = (Queue)malloc(sizeof(struct QNode));
    Q->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
    Q->Front = 0;
    Q->Rear = 0;
    Q->MaxSize = MaxSize;
    return Q;
}

// 数组预留一个空位代表队列满
bool IsFull(Queue Q){
    return ((Q->Rear+1)%Q->MaxSize == Q->Front);
}

bool AddQ(Queue Q,ElementType X){
    if(IsFull(Q)){
        printf("Queue is Full\n");
        return false;
    }else{
        Q->Rear = (Q->Rear+1)%Q->MaxSize;
        Q->Data[Q->Rear] = X;
        return true;
    }
}

bool IsEmpty(Queue Q){
    return (Q->Front == Q->Rear);
}

ElementType DeleteQ(Queue Q){ // 出队 并返回出队的元素
    if(IsEmpty(Q)){
        printf("Queue is Empty\n");
        return ERROR;
    }else{
        Q->Front = (Q->Front+1)%Q->MaxSize;
        return Q->Data[Q->Front];
    }
}
int main(){
    Queue q = CreateQueue(10);
    AddQ(q, 0);
    AddQ(q, 1);
    int a;
    a = DeleteQ(q);
    printf("a = %d\n",a);
    AddQ(q, 2);
    a = DeleteQ(q);
    printf("a = %d\n",a);
    a = DeleteQ(q);
    printf("a = %d\n",a);
    a = DeleteQ(q);
    printf("a = %d\n",a);
    return 0;
}

 

标签:顺序,return,队列,Queue,MaxSize,循环,Front,Rear
From: https://www.cnblogs.com/xinrenbool/p/16886764.html

相关文章

  • CSS 样式属性书写顺序对渲染性能到底有没有影响(实验论证-2022.11)
    在前端领域有一定工作年限,并且接触过前端蛮荒时代(前后端不分离,jQuery,纯HTML+CSS+JS)开发的小伙伴,应该对CSS样式非常熟悉。早在那个年代,前端在编写CSS代码时,已经听说业界对......
  • 聊聊消息队列(MQ)那些事
    每年的双十一期间,各大电商平台流量暴增,同时,电商平台系统的负载压力也会很大。譬如订单支付的场景,每个订单支付成功后,服务器可能要完成扣减积分、扣减优惠券、扣减商品库存......
  • 循环更新
    第三节循环语句1.基础知识:whiledowhileforif是判断一次执行后面的语句,while是每次成立执行循环语句中的语句if(a%2)与if(a%2==0)i区别f(a%2)是对A%2的结果......
  • JavaScript中的几种for循环效率对比
    JavaScript(下文简称JS)中最常用的数据结构有两种,即数组(下文用Array表示)和对象(下文用Object表示)。须要注意的是,本质上,数组也是一种对象,只不过是特殊的对象。遍历Array和Obje......
  • python的while循环
    语法while条件:#条件成立,循环执行的代码一#条件成立,循环执行的代码二#条件成立,循环执行的代码三#条件成立,循环执行的代码四#.......如......
  • python的for循环
    语法foriinxxx#循环体else:#循环正常结束执行执行else中的代码#循环通过break强制结束则不会执行else用法1、遍历列表li=[34,66,33,7......
  • 分别应用while语句、do-while语句和for语句, 求出100以内所有奇数的和。分析三种循环语
    //#include<stdio.h>//intmain()//{// inta,b,c;// b=1;a=1;c=0;// while(a<100)// {// b=a+b;// printf("%d",a); // c=a+c;// a=a+2;// }// prin......
  • 第七章 用户输入和while循环
    7.1函数input()的工作原理函数input()让程序暂停运行,等待用户输入一些文本。获取用户输入后,python将其存储在一个变量中。7.1.1使用int()来获取数值输入将字符转变为......
  • 编写C程序,实现链队列的下列功能: 1、设计一个虚拟界面,让用户选择操作(根据提示输入数据
    编写C程序,实现链队列的下列功能: 1、设计一个虚拟界面,让用户选择操作(根据提示输入数据)2、采用模块化编程思想,编写main函数和若干子函数(实现功能)3、队列的基本功能有:......
  • linux多命令的顺序执行
    当我们需要一次执行多个命令的时候,命令之间需要用连接符连接,不同的连接符有不同的效果。(1);分号,没有任何逻辑关系的连接符。当多个命令用分号连接时,各命令之间的执行成......