
关于数据结构的一点问题,求大侠指教!这段是循环链表的内容,是删除队头元素用的,谢谢~~~
externStatusDeQueue(SqQueue&Q,QElemType&e){//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK//否则返回ERRORi...
extern Status DeQueue(SqQueue &Q,QElemType &e)
{
//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK
//否则返回ERROR
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE; //这句看不懂啊
return OK;
}
不知道那一句是什么意思
错了,是循环队列的……
谢谢哦~终于明白了~~感谢其他几个朋友帮忙了,不过最佳答案只能有一个,所以就取一楼了~不过真的很感谢你们~~~ 展开
{
//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK
//否则返回ERROR
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE; //这句看不懂啊
return OK;
}
不知道那一句是什么意思
错了,是循环队列的……
谢谢哦~终于明白了~~感谢其他几个朋友帮忙了,不过最佳答案只能有一个,所以就取一楼了~不过真的很感谢你们~~~ 展开
3个回答
展开全部
循环队列是头尾相连的。比如数组有5个元素,下标分别是0,1,2,3,4.
当队尾指针到达4的时候,可能队头指针为3,这时,还有下标为0,1,2的空间可用。
但如果尾指针rear+1的话,就会超出下标上限。所以这时候4+1=5,要和数组最大元素个数求余数,得0,从而构成循环。
队头指针front也是同样道理。
这条语句的具体作用就是front指针+1后与MAXQSIZE做求余数运算,从而构成循环。
当队尾指针到达4的时候,可能队头指针为3,这时,还有下标为0,1,2的空间可用。
但如果尾指针rear+1的话,就会超出下标上限。所以这时候4+1=5,要和数组最大元素个数求余数,得0,从而构成循环。
队头指针front也是同样道理。
这条语句的具体作用就是front指针+1后与MAXQSIZE做求余数运算,从而构成循环。
展开全部
循环队列,逻辑上所有元素存在一个环上,但实际物理上是在一个固定长度的数组里,存储空间是有限的,限制了最大元素个数是MAXQSIZE,%运算是求余数。总体效果是当访问下一个元素的时候,如果到达数组的末尾,则跳回开头继续。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-04-10
展开全部
Q.front=(Q.front+1)%MAXQSIZE; //这句看不懂啊
这句是为了防止链表溢出!
例如:链表长度为10时,而front现在指向第10个元素,如果front+1就会产生溢出,而此时就要将front+1对 链表长度 取余,这样+1后的front指向链表的第一个位置,这样也就实现了循环,防止了溢出!
这句是为了防止链表溢出!
例如:链表长度为10时,而front现在指向第10个元素,如果front+1就会产生溢出,而此时就要将front+1对 链表长度 取余,这样+1后的front指向链表的第一个位置,这样也就实现了循环,防止了溢出!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询