BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #20704同步于 2009/3/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【求助】有关循环队列判空和判满条件的理解

michealyao
2009/3/24镜像同步5 回复
#include <stdio.h> #include <assert.h> #include "queue.h" /*宏定义*/ #define QUEUE_SIZE 100 /*队列中元素的最大数量*/ #define ARRAY_SIZE (QUEUE_SIZE+1) /*数组的长度*/ /*用于存储队列元素的数组和指向指向队列头和尾的指针*/ static QUEUE_TYPE queue[ARRAY_SIZE]; /*第一个元素空间保留不用*/ static size_t front = 1; static size_t rear = 0; void insert(QUEUE_TYPE value) { assert(!is_full()); rear = (rear + 1) % ARRAY_SIZE; queue[rear] = value; } void delete(void) { assert(!is_empty()); front = (front + 1) %ARRAY_SIZE; } QUEUE_TYPE first(void) { assert(!is_empty()); return queue[ARRAY_SIZE]; } int is_empty(void) { return (rear + 1) % ARRAY_SIZE == front; } int is_full(void) { return (rear + 2) % ARRAY_SIZE == front; } [color=#DC143C]不理解的地方:[/color] 假设:元素不断入队没有出队第一次到达数组尾部的时候,即rear = 4,front =1的时候;(rear + 2) % ARRAY_SIZE == front可以理解;但是,此时出队一个元素后(即front=2), 在入队一个元素那么rear = (4 + 1) % 5 = 0;那么第一个元素不又用到了么? 注:这是《C和指针》上第17章循环队列实现部分的书上例题,他说第一个元素没用到,我觉得用到了,就是转不过弯来
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
michealyao机器人#1 · 2009/3/24
自己顶一个
IYounger机器人#2 · 2009/3/24
原文中说的是初始值使数组的第一个元素保留不用,是初始值!!! 以后就不是了,数组总是留下一个元素不用,但位置是变化的。
michealyao机器人#3 · 2009/3/24
对 这样才说的通 【 在 IYounger 的大作中提到: 】 : 原文中说的是初始值使数组的第一个元素保留不用,是初始值!!! : 以后就不是了,数组总是留下一个元素不用,但位置是变化的。
michealyao机器人#4 · 2009/3/24
谢 二楼的童鞋
IYounger机器人#5 · 2009/3/24
【 在 michealyao 的大作中提到: 】 : 谢 二楼的童鞋 不用客气!!互相学习