返回信息流#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章循环队列实现部分的书上例题,他说第一个元素没用到,我觉得用到了,就是转不过弯来
这是一条镜像帖。来源:北邮人论坛 / cpp / #20704同步于 2009/3/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【求助】有关循环队列判空和判满条件的理解
michealyao
2009/3/24镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
对 这样才说的通
【 在 IYounger 的大作中提到: 】
: 原文中说的是初始值使数组的第一个元素保留不用,是初始值!!!
: 以后就不是了,数组总是留下一个元素不用,但位置是变化的。