c语言循环队列满的问题

循环队列满时front所指位置有没有元素... 循环队列满时 front所指位置 有没有元素 展开
 我来答
凌元修瓮歌
2020-05-02 · TA获得超过3.5万个赞
知道大有可为答主
回答量:1.4万
采纳率:27%
帮助的人:1011万
展开全部
s表示的是循环队列的成员个数
front是队列的头指针
rear是队列的尾指针
s=0表示循环队列中的成员个数为0,当然也就是队列为空了
s=1表示循环队列中的成员个数为1,front=rear说明队列的头指针和尾指针都指向同一个队列成员,也就是说这个/队列已经封闭了(首尾已经相接),那么这个队列也就满了
>>front=rear=m其中的m也不晓得是什么了
这个m就是具体的成员的地址了,front=rear=m,m就成了当前循环队列中唯一的成员
_whales
2013-03-11 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:510万
展开全部
队列和语言无关,主要看采用什么策略!
1)多1空间的一种实现!

enum {NUM =120};
struct Queue
{
int a[NUM+1];

int rear;
int front;
};
push(x){ q.a[ q.front++]=x;}
pop(){ q.rear++;}
isempty() {return q.rear==q.front;}
isfull(){return q.rear-q.front ==1 || q.rear +NUM - q.front==0;};
这种情况下, 队满的时候,front位置没有元素,下个元素是队尾。
( 这种做法front位置永远没有元素!)

2)计数的一种实现
enum {NUM =120};
struct Queue
{

int a[NUM];
int front;
int count;
};

push(x){ q.a[ q.front++]=x;}
pop(){ q. count--;}
isempty() {return q.count==0;}
isfull(){return q.count==NUM;};
这种情况下 队满的时候front位置和下个位置都有元素!!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4e8cb6d
2013-03-10
知道答主
回答量:8
采纳率:0%
帮助的人:3.8万
展开全部
有元素,并且是最后一个元素
对空时,front和rear指向同一位置
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sundongfang86
2013-03-10
知道答主
回答量:23
采纳率:100%
帮助的人:14.2万
展开全部
都满了,肯定有啊
追问
rear 和front所指的是不是同一点?
队列体积为m 满时元素个数 为m-1 (定义)?
队头指针指应该向队头元素的前一个位置(定义)?
追答
我是这么理解的:
队列体积为m满时元素个数为m.
初始化时将队列中的元素全部初始化,这里假设初始化为-2.
下面是一个用JAVA写的队列,是一样的。
入队操作:将输入值赋给当前结点,入队指针(inIndex)指向下一个结点
出对操作:获取当前出队结点的值,将该结点的值赋为初始值-2,出队指针(outIndex)指向下 一个结点
判断是否已满:inIndex == outIndex && queue[inIndex] != -2这时队列已满。

public class CircularQueue {
//队列原型数组
public int[] queue;
//入队与出队游标
private int inIndex,outIndex = 0;
boolean empty,full;
public CircularQueue(int size) {
queue = new int[size];
for(int i=0; i<size; i++){
queue[i]=-2;
}
empty = true;
full = false;
}
/*
* 返回队列长度
*/
public int length() {
return queue.length;
}
/*
* 入队
*/
public boolean in(int obj) {
if(isFull()) {
return false;
}
//设置当前队列入队节点为传入对象
queue[inIndex] = obj;
//指向下一个节点
nextInIndex();
return true;
}
/*
* 出队
*/
public int out() {
if(isEmpty()) {
return -1;
}
//获取当前出队节点的对象
int result = queue[outIndex];
//清空当前位置
queue[outIndex] = -2;
//指向下一个节点
nextOutIndex();
return result;
}
/*
* 是否为空
*/
public boolean isEmpty() {
if(inIndex == outIndex && queue[inIndex] == -2) {
return true;
}
return false;
}
/*
* 是否已满
*/
public boolean isFull() {
if(inIndex == outIndex && queue[inIndex] != -2) {
return true;
}
return false;
}
//入队游标指向下一个节点
private int nextInIndex() {
if(inIndex + 1 < queue.length) {
inIndex += 1;
} else {
inIndex = 0;
}
return inIndex;
}
//出队游标指向下一个节点
private int nextOutIndex() {
if(outIndex + 1 < queue.length) {
outIndex += 1;
} else {
outIndex = 0;
}
return outIndex;
}
//清空队列中所有数据
public void clear(){
outIndex = 0;
inIndex= 0;
for(int i=0; i<length(); i++){
queue[i]=-2;}
empty = true;
full = false;
}
//
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式