4个回答
展开全部
s表示的是循环队列的成员个数
front是队列的头指针
rear是队列的尾指针
s=0表示循环队列中的成员个数为0,当然也就是队列为空了
s=1表示循环队列中的成员个数为1,front=rear说明队列的头指针和尾指针都指向同一个队列成员,也就是说这个/队列已经封闭了(首尾已经相接),那么这个队列也就满了
>>front=rear=m其中的m也不晓得是什么了
这个m就是具体的成员的地址了,front=rear=m,m就成了当前循环队列中唯一的成员
front是队列的头指针
rear是队列的尾指针
s=0表示循环队列中的成员个数为0,当然也就是队列为空了
s=1表示循环队列中的成员个数为1,front=rear说明队列的头指针和尾指针都指向同一个队列成员,也就是说这个/队列已经封闭了(首尾已经相接),那么这个队列也就满了
>>front=rear=m其中的m也不晓得是什么了
这个m就是具体的成员的地址了,front=rear=m,m就成了当前循环队列中唯一的成员
展开全部
队列和语言无关,主要看采用什么策略!
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位置和下个位置都有元素!!
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位置和下个位置都有元素!!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有元素,并且是最后一个元素
对空时,front和rear指向同一位置
对空时,front和rear指向同一位置
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
都满了,肯定有啊
追问
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;
}
//
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询