顺序循环队列
时间:2022-04-22
本文章向大家介绍顺序循环队列,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 //循环队列的顺序存储表示与实现
2
3 #include <stdio.h>
4 #include <stdlib.h>
5
6 /******************************************************************************
7 /* 数据类型和常量定义
8 /******************************************************************************/
9 #define OK 1
10 #define ERROR 0
11 #define OVERFLOW -2
12
13 typedef int Status;
14 typedef int ElemType;
15 typedef int QElemType;
16
17 /******************************************************************************
18 /* 数据结构声明
19 /******************************************************************************/
20 /* 循环队列 - 队列的顺序存储结构 */
21 #define MAXQSIZE 3 /* 最大队列长度 */
22
23 typedef struct {
24 QElemType *base; /* 初始化的动态分配存储空间 */
25 int front; /* 头指针,若队列不空,指向队列头元素 */
26 int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */
27 }SqQueue;
28
29
30 //构造一个空队列Q
31 Status InitQueue(SqQueue &Q) {
32 Q.base = (ElemType *)malloc(MAXQSIZE * sizeof(ElemType));
33 if (!Q.base) exit(OVERFLOW);
34 Q.front = Q.rear = 0;
35 return OK;
36 }
37
38
39 //返回Q的元素个数, 即队列的长度
40 int QueueLength(SqQueue &Q) {
41 return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
42 }
43
44
45 //插入元素e为Q的新的队尾元素
46 Status EnQueue(SqQueue &Q, QElemType e) {
47 if ((Q.rear + 1) % MAXQSIZE == Q.front) return ERROR; //队列满
48 Q.base[Q.rear] = e;
49 Q.rear = (Q.rear + 1) % MAXQSIZE;
50 return OK;
51 }
52
53
54 //若队列不空, 则删除Q的队头元素, 用e返回其值, 并返回OK; 否则返回ERROR
55 Status DeQueue(SqQueue &Q, QElemType &e) {
56 if (Q.front == Q.rear) return ERROR;
57 e = Q.base[Q.front];
58 Q.front = (Q.front + 1) % MAXQSIZE;
59 return OK;
60 }
61
62 //测试函数
63 void main()
64 {
65 SqQueue Q; QElemType e;
66 InitQueue(Q);
67 if(OK == EnQueue(Q, 10)) printf("enqueue ok!n");
68 if(OK == EnQueue(Q, 20)) printf("enqueue ok!n");
69 if(OK == EnQueue(Q, 30)) printf("enqueue ok!n");
70 if(OK == DeQueue(Q, e)) printf("%dn", e);
71 if(OK == DeQueue(Q, e)) printf("%dn", e);
72 if(OK == DeQueue(Q, e)) printf("%dn", e);
73 if(OK == DeQueue(Q, e)) printf("%dn", e);
74 }
- WordPress 中部署真正的懒加载(Lazy Load)
- 图形化的2008R2 Server Core 配置管理工具
- 各种浏览器的userAgent
- WordPress 根据浏览器 user-agent 按需加载CSS 文件
- memcached的最新状态
- [程序设计语言]-01:引言
- ASP.NET Ajax 库
- ASP.NET进程优化
- 多说 提速:js内页页脚加载、静态文件CDN
- 微信小程序的王者时代
- [程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)
- NUMA架构
- 如何处理 Python 入门难以进步的现象?
- 编写前置和后置条件的连贯接口库:CuttingEdge.Conditions
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux运维之如何使用ss命令代替netstat
- 对Linux终端使用socks5代理的方法详解
- linux安装xmind的方法步骤
- 对linux下软件(库)的更新命令详解
- Linux环境下Apache服务器配置二级域名的方法详解
- Linux环境下Apache开启https服务的方法详解
- 使用GANs生成时间序列数据:DoppelGANger论文详解
- CentOS 7使用samba共享文件夹的完整步骤
- Linux环境使用crontab命令设置定时周期性执行任务【含php执行代码】
- linux系统报xfs_vm_releasepage警告问题的处理方法
- linux系统报tcp_mark_head_lost错误的处理方法
- Pandas的列表值处理技巧,避免过多循环加快处理速度
- 详解Linux iptables常用防火墙规则
- Linux文件权限与群组修改命令详解
- Spring-IOC-从单例缓存中获取单例 Bean