博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
循环队列_数组实现
阅读量:5067 次
发布时间:2019-06-12

本文共 2181 字,大约阅读时间需要 7 分钟。

循环队列是指, 队尾指针走到末尾后, 还可以继续从头开始走.

front指针仍然是指向第一个元素的前一个元素, rear指针指向最后一个元素.

下面我们重点讨论一下循环队列如何判断空和满的问题?
我下面判断队列空和满是直接根据q->length属性来判断, 当q->length为0,
表示队列为空, 当q->length = maxSize - 1时, 队列为满. 由于遍历上的原因,
队列的最大长度只能是数组最大长度-1.

#include 
#include
struct queue { int* data; int front; int rear; int maxSize; int length;};typedef struct queue node;typedef struct queue* link;// 函数声明link createQueue (int maxSize);void printQueue (link q);int add (link q, int x);int del (link q);int main () { int i; int maxSize = 10; // 队列的最大长度 link qhead = createQueue(maxSize); // 初始队列信息 printQueue(qhead); // 基本入队测试 for (i=1; i<=10; i++) { add(qhead, i * 2); } printQueue(qhead); // 基本出队测试 del(qhead); del(qhead); del(qhead); del(qhead); printQueue(qhead); // 循环入队测试 add(qhead, 100); add(qhead, 200); add(qhead, 300); add(qhead, 400); add(qhead, 500); printQueue(qhead); return 0;}// 创建空队列link createQueue (int maxSize) { link q; q = (node*)malloc(sizeof(node)); q->data = (int*)malloc(sizeof(int) * maxSize); q->front = -1; q->rear = -1; q->length = 0; q->maxSize = maxSize; return q;}// 打印void printQueue (link q) { int i; printf("当前队列的信息如下: \n"); printf("front = %d\n", q->front); printf("rear = %d\n", q->rear); printf("length = %d\n", q->length); printf("maxSize = %d\n", q->maxSize); // 打印队列中的数据 if (q->length == 0) { printf("当前队列中没有数据\n"); } else { printf("队列中的数据如下: \n"); i = q->front; while (i != q->rear) { i = (i + 1) % q->maxSize; printf("%d %d\n", i, q->data[i]); } } printf("\n");}// 入队int add (link q, int x) { if (q->length == q->maxSize -1 ) { printf("队列已满, 不能入队\n"); return 0; } q->rear = (q->rear + 1) % q->maxSize; q->data[q->rear] = x; q->length++; return 1;}// 出队// 错误返回0, 正确返回被出队元素的值int del (link q) { if (q->length == 0) { printf("队列为空, 不能出队\n"); return 0; } q->front = (q->front + 1) % q->maxSize; q->length--; return q->data[q->front];}

转载于:https://www.cnblogs.com/asheng2016/p/7615741.html

你可能感兴趣的文章
sql注入
查看>>
「破解」Xposed强
查看>>
src与href的区别
查看>>
ABAP工作区,内表,标题行的定义和区别
查看>>
《xxx重大需求征集系统的》可用性和可修改性战术分析
查看>>
Python 中 创建类方法为什么要加self
查看>>
关于indexOf的使用
查看>>
【转】JS生成 UUID的四种方法
查看>>
英语单词
查看>>
centos6.8下安装matlab2009(图片转帖)
查看>>
Mongo自动备份
查看>>
求助大神!怎样批量删除数据库表中某个字段中同样的一段字符!
查看>>
VMWARE虚拟机无法访问的三种方法分析
查看>>
enq: SQ - contention
查看>>
cer证书签名验证
查看>>
ant 安装
查看>>
新手Python第一天(接触)
查看>>
iOS中ARC内部原理
查看>>
【bzoj1029】[JSOI2007]建筑抢修
查看>>
synchronized
查看>>