当前位置: 首页 > news >正文

[数据结构]:04-循环队列(数组)(C语言实现)

目录

前言

已完成内容

循环队列实现

01-开发环境

02-文件布局

 03-代码

01-主函数

02-头文件

03-QueueCommon.cpp

04-QueueFunction.cpp

结语


前言

        此专栏包含408考研数据结构全部内容,除其中使用到C++引用外,全为C语言代码。使用C++引用主要是为了简化指针的使用,避免二重指针的出现。

已完成内容

[数据结构]:01-顺序表(C语言实现)_Chandni.的博客-CSDN博客

[数据结构]:02-单链表(C语言实现)_Chandni.的博客-CSDN博客

[数据结构]:03-栈(C语言实现)_Chandni.的博客-CSDN博客

循环队列实现

01-开发环境

        语言:C/C++14

        编译器:MinGW64

        集成开发环境:CLion2022.1.3

02-文件布局

        请在CLion集成开发环境中创建C++可执行程序,否则无法运行,原因上面已解释。

                        

 03-代码

01-主函数

        用于测试和初始化队列。

#include "./Head/QueueData.h"
#include "./Source/QueueCommon.cpp"
#include "./Source/QueueFunction.cpp"int main() {ArrayQueue Q;// 初始化InitializationQueue(Q);// 入队QueuePush(Q, 1);QueuePush(Q, 2);QueuePush(Q, 3);QueuePush(Q, 4);QueuePush(Q, 5);QueuePrint(Q);printf("---------------------\n");// 出队ElemType value;QueuePop(Q, value);printf("Queue Pop Value = %d\n", value);QueuePop(Q, value);printf("Queue Pop Value = %d\n", value);QueuePrint(Q);printf("---------------------\n");// 入队QueuePush(Q, 4);QueuePush(Q, 5);QueuePrint(Q);printf("---------------------\n");return 0;
}

02-头文件

        用于存储结构体和常量等。

//
// Created by 24955 on 2023-02-26.
//#ifndef INC_01_ARRAYQUEUE_QUEUEDATA_H
#define INC_01_ARRAYQUEUE_QUEUEDATA_H
// 头文件
#include <Stdio.h>// 常量
#define MaxSize 5
typedef int ElemType;// 结构体
typedef struct {ElemType data[MaxSize];int front, rear;
} ArrayQueue;
#endif //INC_01_ARRAYQUEUE_QUEUEDATA_H

03-QueueCommon.cpp

        用于存储公共函数以及队列的输出。

//
// Created by 24955 on 2023-02-26.
//
// 初始化队列
void InitializationQueue(ArrayQueue &Queue) {/** 1. 初始化队列*/Queue.front = 0;Queue.rear = 0;
}// 判断队列是否为空
bool JudgeQueueEmpty(ArrayQueue Queue) {/** 1. 头指针和尾指针相等则队列为空* 2. 这里的指针加引号,只是一种标识,这样说方便理解*/if (Queue.front == Queue.rear) {return true;} else {return false;}
}// 判断队列是否已满
bool JudgeQueueFull(ArrayQueue Queue) {/** 1. 尾指针+1取模与头指针相等则满*/if ((Queue.rear + 1) % MaxSize == Queue.front) {return true;} else {return false;}
}// 输出队列元素
void QueuePrint(ArrayQueue Queue) {/** 1. 判断队列是否为空* 2. 若不为空则从头输出*/if (!JudgeQueueEmpty(Queue)) {while (Queue.front != Queue.rear) {printf("%3d", Queue.data[Queue.front]);Queue.front = (Queue.front + 1) % MaxSize;}printf("\n");} else {printf("Queue Empty.\n");}
}

04-QueueFunction.cpp

        用于存储入队、出队等函数。

//
// Created by 24955 on 2023-02-26.
//
// 入队
void QueuePush(ArrayQueue &Queue, ElemType value) {/** 1. 判断队列是否已满* 2. 若不满则入队*/if (!JudgeQueueFull(Queue)) {Queue.data[Queue.rear] = value;Queue.rear = (Queue.rear + 1) % MaxSize;} else {printf("Queue Full.\n");}
}// 出队
void QueuePop(ArrayQueue &Queue, ElemType &value) {/** 1. 判断队列是否已空* 2. 若非空则出队*/if (!JudgeQueueEmpty(Queue)) {value = Queue.data[Queue.front];Queue.front = (Queue.front + 1) % MaxSize;} else {printf("Queue Empty.\n");}
}

结语

       本章循环队列的实现形式为数组的实现形式,循环队列还可以使用链表形式实现,链表实现形式请关注本专栏下一章。

        此博客主要用于408考研数据结构C语言实现记录,内有不足,可留言,可讨论。

http://www.lryc.cn/news/21057.html

相关文章:

  • buu [GWCTF 2019]BabyRSA 1
  • codeforces 1669F
  • 高数考试必备知识点
  • [蓝桥杯] 二分与前缀和习题练习
  • SpringMvc中HandlerAdapter组件的作用
  • FreeRTOS优先级翻转
  • 服务器部署—部署springboot之Linux服务器安装jdk和tomcat【建议收藏】
  • golang项目----家庭收支记账软件
  • 中国LNG市场投资机会研究
  • Elasticsearch:索引数据是如何完成的
  • 处理器管理
  • 跟着我从零开始入门FPGA(一周入门系列)第五
  • 【第42天】Arrays.sort 与 Collections.sort 应用 | 整形数组与集合的排序
  • LeetCode第334场周赛
  • 基于深度学习的三维重建网络PatchMatchNet(三):PatchMatchNet配置及代码主要运行流程
  • 【一天一门编程语言】设计一门编程语言,给出基础语法代码示例,SDK设计。
  • ubuntu 下 python 安装 venv
  • HTML#1快速入门
  • 【MySQL】事务隔离级别是怎么实现的?
  • JSP网上书店系统用myeclipse定制开发mysql数据库B/S模式java编程计算机网页
  • 配置 Haproxy 负载均衡群集
  • 计算机网络笔记 | 第一章:计算机网络概述(1.1-1.4小节知识点整理)
  • Flutter3引用原生播放器-Android篇
  • SerenityOS 操作系统类 Unix 操作系统
  • Bean作用域和生命周期
  • STM32笔记
  • 【论文阅读】基于LevelDB的分布式数据库研究
  • JavaScript高级 Iterator Generator
  • 数字IC手撕代码--乐鑫科技(次小值与次小值出现的次数)
  • JavaScript DOM和BOM