顺序循环队列
时间: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 }
- POJ 3673 Cow Multiplication
- HDU 5144 NPY and shot(物理运动学+三分查找)
- 深度|Python股票数据分析
- HDU 2438 Turn the corner(三分查找)
- UVAlive 3708 Graveyard(最优化问题)
- HDU 1754 I Hate It(线段树之单点更新,区间最值)
- Selenium2+python自动化19-单选和复选框
- Uva 11300 Spreading the Wealth(递推,中位数)
- Uva 11729 Commando War (简单贪心)
- UVA 11292 Dragon of Loowater(简单贪心)
- Codeforces Beta Round #2 A,B,C
- 牛顿迭代法(Newton's Method)
- 最长递减子序列(nlogn)(个人模版)
- Selenium2+python自动化26-js处理内嵌div滚动条
- 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 数组属性和方法
- 重拾前端技能为你的职业前程保驾护航
- 检查图片是否损坏、图片后缀是否与实际图片类型对应 - Python
- 规则引擎 - drools 使用讲解(简单版) - Java
- Python奇技淫巧 - 持续更新中....
- 150+行Python代码实现带界面的数独游戏
- Python实现十大经典排序算法
- 140行Python代码实现Flippy Bird
- 200行Python代码实现贪吃蛇
- 简单说维特比算法 - python实现
- Android绘图及Bitmap几个知识点整理
- Spark Pipeline官方文档
- Python-时间及日期-07-获取本周或上周几具体日期
- Spark Job-Stage-Task实例理解
- 想查看微信好友撤回的消息?Python帮你搞定
- MySQL 案例:同步中断与SQL线程类型转换