循环队列的操作

来源:互联网 发布:怎样在淘宝上联系卖家 编辑:程序博客网 时间:2024/05/22 09:47

基本思想

队列是一种操作受限的线性表,特点是“先进先出”,其限制在于允许在表的一端进行插入,称之为队尾(rear),新元素进队称为进队;在表的另一端进行删除队头(front),从队列中删除元素称为出队。
而顺序队作为队列的一种存储方式,常被运用,但是为了解决顺序队列的“假溢出”现象(顺序队中,是引入两个指针,且两个指针最终会达到数组的末端,虽然队中已没有元素,但还是无法让元素入队),我们引入了循环队列,即将数组弄成一个环,让两指针绕着环走,这样永远不会出现两者来到尽头却无路可走的情况,具体过程如下:
循环队列示意图

算法详情

#include<stdio.h>#include<iostream> #define maxSize 20typedef struct{     int data[maxSize];     int front; //队头     int rear;  //队尾}//初始化队列算法void initQueue(SqQueue &qu){    qu.front = qu.rear = 0; //队首和队尾指针重合,指向0}//判断队空int isEmpty(SqQueue qu){    if(qu.front == qu.rear) //无论指向哪个位置        return 1;    else        return 0;}//进队算法int enQueue(SqQueue &qu,int x){    if((qu.rear+1)%maxSize == qu.front) //无论指向哪个位置        return 0;    qu.rear = (qu.rear+1)%maxSize; //队未满,先移指针    qu.data[qu.rear] = x; //再存入元素    return 1;}//出队算法int deQueue(SqQueue &qu,int &x){    if(isEmpty(qu)) //队空        return 0;    qu.front = (qu.front+1)%maxSize; //队未空,先移指针    x = qu.data[qu.front]; //再取出元素    return 1;}int main(){    //}
原创粉丝点击