假设循环队列中只设rear和length来分别表示队尾元素的位置和队中元素的个数
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/10 15:07:24
Q[0..m-1]是队列起始的front=(rear-length+1)%m队满时:(rear+1)%m==front,n为队列长度(所用数组大小),由于rear,front均为所用空间的指针,循环只
voidEnQueue(LinkedListrear,ElemTypex){s=(LinkedList)malloc(sizeof(LNode));//申请结点空间s->data=x;s->next=
其实M可以去掉,只是为了方便理解,在总长M的队列中减去实际长度length等于剩余的长度由于是循环队列,用剩余的长度加上队尾标加一也就等于队首标.其中加一是因为需要从队尾的后一个元素算起,不加一的话就
如果是用数组实现的用队尾减队头再模数组长度如果是链表就要有个计数变量了
思路:数组中地址连续,对于循环数组,考虑front和rear前后关系.自己写了个例子intmain(void){#defineM20inta[M];int*front,*rear;front=&a[1
避免rear-front成为负值
该循环队列中共有24个元素详见:http://baike.baidu.com/view/203647.htm?fr=aladdin
等于0的话这两个就是空指针了,而且队列的创建需要用到循环语句不断分配内存的,开始时头尾指针应该同时指向队列中第一个元素的内存空间
2.答案,A,这个是根据循环队列的定义来了,教材在处理循环队列的溢出时,是空一位不用,所以队列中元素的个数(rear-front+m)%m;为什么+m是因为可能出现rear-front
当前队尾rear如果向队尾插入元素则rear+1如果rear+1>=maxsize那么rear=(rear+1)%maxsize(循环队列)
循环队列元素个数:n=(rear-front+m)modmmod为取余数运算.
queue::queue()//buildanemptyqueue{front=0;rear=0;}boolqueue::empty()const{returnrear==front;}(rear+1
判断队列满的条件:(rear+1)%m==(rear-quelen+m)%m入队算法voidEnQueue(ElemTypesequ[],ElemTypevalue){if((rear+1)%m==(
ear-front,如果差是非正数,加队列的长度再问:(rear-front+35)%35=0or35是这个公式吗?rear和front是初始状态还是终了状态哦?后面那个+15还是+35?还是都行?再
不对,是(rear+1)%maxsize==front,注意是"%"取余运算,而不是“/”除法运算
另一种方式就是数据结构常用的:队满时:(rear+1)%n==front,n为队列长度(所用数组大小),由于rear,front均为所用空间的指针,循环只是逻辑上的循环,所以需要求余运算.如图情况,队
假设循环队列的长度为MAX,判断循环队列为满的基本条件是(rear+1)%MAX==front而front=(rear-length+MAX)%MAX综合得到判断循环队列为满的条件:(rear+1)%