循环队列的操作

基本思想

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

算法详情

#include
#include 
#define maxSize 20

typedef 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()
{
    //
}

你可能感兴趣的:(数据结构学习)