C语言实现环形队列基本操作(以简单排队问题为例)

通过调用简单函数实现顺序表的相关操作。代码编译环境为VS2019 16.9.4。因为VS的某些原因,scanf写为了scanf_s,作用是一样的,在其他编译环境中可将scanf_s改回去。

建议运行后体验:

#include<stdio.h>  //输入输出头文件
#include<stdlib.h>    //标准头文件
#include<stdbool.h>   //布尔类型头文件
#define MaxSize 100typedef long long int Elemtype;          //该队列中的元素为字符
typedef struct Quene* SqList;   //将该队列类型的指针命名为SqList
struct Quene            //定义环形队列
{Elemtype data[MaxSize];            //存放队列中的数据元素int front, rear;                //队头和队尾的数组下标
};bool InitQuene(SqList& q);                //初始化队列
bool DestroyQuene(SqList& q);           //销毁队列
bool QueneEmpty(SqList& q);             //判断队列是否为空
bool enQuene(SqList& q, Elemtype e);    //进队列
bool deQuene(SqList& q, Elemtype& e);   //出队列
void menu(void);                        //主界面
void menu1(void);                       //店长菜单
void menu2(void);                       //顾客菜单int main(int argc, const char* argv[])
{SqList q;Elemtype e;bool flag = false;int n, m;InitQuene(q);menu();while (scanf_s("%d", &n) != EOF) {if (n == 0) //退出break;if (n == 1) {menu1();scanf_s("%d", &m);while (m != 0) {switch (m) {case 1:flag = deQuene(q, e); if (flag)printf("%lld已取餐。\n",e);elseprintf("当前没有顾客,出餐失败。\n");break;case 2:flag = QueneEmpty(q);if (flag)printf("当前无人排队,可以休息了。\n");elseprintf("顾客正在等待。\n");break;default:printf("指令错误,请重新输入。\n");}menu1();scanf_s("%d", &m);}}else if (n == 2) {printf("请输入您的会员号(不超十位的整数):");scanf_s("%lld", &e);menu2();scanf_s("%d", &m);while (m != 0) {switch (m) {case 1:flag = enQuene(q, e);if (flag)printf("预定成功。\n");elseprintf("预定失败,已达到最大预定人数。\n");break;case 2:flag = QueneEmpty(q);if (flag)printf("当前无人排队,你很幸运。\n");elseprintf("前方仍有其他顾客在排队。\n");break;default:printf("指令错误,请重新输入。\n");}menu2();scanf_s("%d", &m);}}elseprintf("指令错误,请重新输入。\n");menu();}DestroyQuene(q);return 0;
}
void menu(void)
{printf("==========================\n");printf("=======选择您的身份=======\n");printf("==                      ==\n");printf("==      1.商家          ==\n");printf("==      2.客户          ==\n");printf("==      0.退出系统      ==\n");printf("==                      ==\n");printf("==========================\n");
}
void menu1(void)
{printf("==========================\n");printf("=========店长你好=========\n");printf("==                      ==\n");printf("==   1.出餐             ==\n");printf("==   2.是否有人等餐     ==\n");printf("==   0.退出系统         ==\n");printf("==                      ==\n");printf("==========================\n");
}
void menu2(void)
{printf("==========================\n");printf("=========顾客你好======== \n");printf("==                      ==\n");printf("==   1.加入排队         ==\n");printf("==   2.是否有人等餐     ==\n");printf("==   0.退出系统         ==\n");printf("==                      ==\n");printf("==========================\n");
}
bool InitQuene(SqList& q)
{q = (SqList)malloc(sizeof(Quene));//malloc有一定几率申请空间失败,此时继续申请,直到申请成功while (!q) {q = (SqList)malloc(sizeof(Quene));}q->front = q->rear = 0;  //此时队列无元素(两个下标之间差的绝对值为0)return true;
}
bool DestroyQuene(SqList& q)
{free(q);return true;
}
bool QueneEmpty(SqList& q)
{if (q->front == q->rear)   //当队列为空时返回“真”,否则返回“假”return true;elsereturn false;
}
bool enQuene(SqList& q, Elemtype e)
{if ((q->rear + 1) % MaxSize == q->front)  //当队列已满时返回“假”return false;q->rear = (q->rear + 1) % MaxSize;q->data[q->rear] = e;return true;
}
bool deQuene(SqList& q, Elemtype& e)
{if (q->front == q->rear)   //当队列为空时返回“假”return false;q->front = (q->front + 1) % MaxSize;e = q->data[q->front];return true;
}

C语言实现环形队列基本操作相关推荐

  1. C语言数据结构——环形队列

    队列都有两个指针,分别指向队头和队尾,用于出队入队 这里使用顺序表来实现队列,设置头元素下标为front,指向队头,尾元素下标为rear,指向队尾的下一个节点.之所以不选择链表,是因为链表不便于查找队 ...

  2. c语言环形队列用法,C语言,环形队列

    什么是环形队列? 环形缓冲区是一个非常典型的数据结构,这种数据结构符合生产者,消费者模型,可以理解它是一个水坑,生产者不断的往里面灌水,消费者就不断的从里面取出水. 那就可能会有人问,既然需要灌水,又 ...

  3. 数据结构环形队列学习(c语言)

    数据结构环形队列学习(c语言) 实现效果 效果模型描述 代码设置队列长度为5,数组实际大小为6(队列长度加1) 黄色方格是队列头,灰色是未被使用内存,蓝色是队列元素 Example1: 当队列添加满元 ...

  4. 【数据结构(C语言描述)】环形队列

    目录 一.基础知识 二.数组实现环队 2.1 初始化 2.2 判断环队是否为空 2.3 判断环队是否为满 2.4 入队 2.5 出队 2.6 取队头元素 2.7 取队尾元素 2.8 销毁环队 三.链表 ...

  5. 静态环形队列(C语言)

    说明: 1.静态环形队列就是长度已提前确定,可以按顺序循环写入数据(0.1.2...9.0.1.2...):可以按顺序循环读取数据(0.1.2...9.0.1.2...):通过write记录写入个数, ...

  6. c语言程序结构环形队列入队,C语言 环形队列

    队列 :队列是一种先进先出的数据结构. 比如说 排队买票, 有一个售票口,最多能排30人,那么最大存储空间就是30人, 每当有1个新人过来排队,就会站在队尾,这就叫入队, 每当有1个人买到票了,就会离 ...

  7. 柔性数组和环形队列之间的故事

    之前的文章,讲解了柔性数组,有很多人留言,提到一些问题.刚好,之前发关于环形队列的文章有些问题,这次刚好拿出来一起说一下,并用柔性数组实现一个环形队列. 柔性数组的上一篇文章 环形队列C语言实现文章 ...

  8. 节点大小可变的环形队列实现

    在文章<Linux C语言在用户态实现一个低时延通知(eventfd)+轮询(无锁队列ring)机制的消息队列>中介绍了用户态低时延消息队列的实现,下面我们简单介绍优化步骤.同时在< ...

  9. 数据结构-环形队列 C和C++的实现

    队列: 含义:是一种先入先出(FIFO)的数据结构. 当我们把数据一个一个放入队列中.当我们需要用到这些数据时,每次都从队列的头部取出第一个数据进行处理.就像排队进场一样,先排队的人先进场. 结构如下 ...

最新文章

  1. python怎么读取txt文件数据保存数组中-python将txt等文件中的数据读为numpy数组的方法...
  2. php项目包导入项目,zend studio导入项目文件的图文操作
  3. 【计算机图形学】实验:C#语言采用GDI+定义笔刷并填充图形完整实验操作流程
  4. Install/Remove of the Service Denied错误解决
  5. 织梦留言板guestbook.htm加入头部导航
  6. 两个异常:a circular reference was detected while serializing及 Maximum length exceeded
  7. 西奥妮·帕帕斯《天天数学》
  8. python闯关游戏,Python挑战游戏( PythonChallenge)闯关之路Level 0
  9. 【Linux】监视CPU、GPU使用情况
  10. 基于React 的前端UI开发框架 及与Electron 的结合 https://cxjs.io/
  11. 067、如何部署Calico网络 (2019-04-10 周三)
  12. DiscuzX模板制作-主题列表页_左边栏制作_V1
  13. c3p0 mysql 连接池配置文件_使用XML配置c3p0数据库连接池
  14. 使用阿里云npm镜像加速
  15. php识别二维码内容
  16. 真正的人工智能,需要理解本体论
  17. 企业邮箱注册—企业微信邮箱2.0时代正式来临
  18. 例题4-6 师兄帮帮忙(A Typical Homework (a.k.a Shi Xiong Bang Bang Mang),Rujia Liu's Present 5, UVa 12412)
  19. 想知道自己的邮箱都注册过哪些服务?看这里
  20. 阿里云被攻击的处理方法

热门文章

  1. ad采样做按键开关_【经验】如何使用模拟开关对单片机AD口进行扩展?
  2. 字符串类型 常见操作方法
  3. OpenSSL密码库算法笔记——第5.1章 椭圆曲线群与点的定义
  4. 计算机windows7更新失败,Win7自动更新失败开不了机怎么办?
  5. idea中使用git
  6. 校园招聘影响因素分析
  7. 孩子在读研究生,父亲该做些什么?
  8. 对做了b、k扩展的工具链进行构建和测试
  9. Lightbox相册,图片滚动和点击放大
  10. 实现android多页面跳转,获取数据操作