- 栈和队列
栈是按照 先进后出或者 后进先出,队列是先进先出
栈只能在栈顶进行插入和删除,栈底不动。
队列是在一端插入,一端删除。
允许插入的是队尾,允许删除的是队头。
循环队列:
队头
队尾:队尾指针指向的是一个空的位置,里面没有内容
循环队列满时: (q->rear + 1) % M == q->front
队尾的下一个指针指向 与队头是同一个位置,则循环队列满了。
队列空 q->rear == q->front;
循环队列上,队头是第一个元素;队尾指向的空元素,对饮个位置为空
元素出队:(front+1)% M
元素入队:(rear+1)% M
例子:
解答: 因为求的是数据个数,或者数据长度,
Q.front指向的是a1, Q.rear指向的是一个空位置,在an的下一个个地址上,所以长度为 Q.rear- Q.front 在加上多次溢出操作,数据长度为 (Q.rear- Q.front + M)%M
例子:
设某循环队列Q的定义中有front和rear两个域变量,其中,front指示队头元素的位置,rear指示队尾元素之后的位置。若该队列的容量是M,则其长度len(元素个数)为(Q.rear-Q.front+M)%
设某循环队列Q的定义中有front和rear两个域变量,其中,front指示队头元素的位置,rear指示队尾元素之后的位置。若该队列的容量是M,则其长度len(元素个数)为(Q.rear-Q.front+M)%M;求队头元素的指针公示:(rear-len+M)%M
;
;
2.