【数据结构】顺序队列的基本操作(C++实现)

什么是队列

队列(Queue)是一种常见的数据结构,它遵循先进先出(First In, First Out,FIFO)的原则。在队列中,最先进入队列的元素最先被取出,而最后进入队列的元素则最后被取出。这类似于我们在生活中排队等待服务的场景,先来的人先得到服务。

假溢出问题

假溢出?进进出出进进出出,会导致数据向后移动,前面的空间空下来浪费了!可以使用循环队列来解决这个问题,怎么判定队满了?rear的下一个是front。 队空:front==rear;队满:(rear+1)%Maxsize==front

队列的定义

静态队列

//静态队列(先进先出)队尾进,队头出
typedef struct SqQueue{
    double data[Maxsize];//定长数组
    int front,rear;//队头,尾(记录下标)
}SqQueue;

动态队列

//动态队列
typedef struct SqQueue{
    double *base;
    int front,rear;//队头,尾(记录下标)
}SqQueue;

队列的初始化

//初始化
bool InitQueue(SqQueue &q){
    q.base=new double[Maxsize];
    if(!q.base){
        return false;
    }
    q.front=q.rear=0;
    return true;    
}

入队

//入队
bool EnQueue(SqQueue &q,double e){
    if((q.rear+1)%Maxsize==q.front){
        return false;
    }
    q.base[q.rear]=e;
    q.rear=(q.rear+1)%Maxsize;
    return true;
}

出队

//出队
bool DeQueue(SqQueue &q,int &e){
    if(q.front==q.rear){
        return false;//队空
    }
    e=q.base[q.front];
    q.front=(q.front+1)%Maxsize;
}

取队头

double GetHead(SqQueue q){
    if(q.front!=q.rear){
        return q.base[q.front];
    }
    return -1;
}

计算队列长度

//计算队列长度
int QueueLength(SqQueue q){
    return (q.rear-q.front+Maxsize)%Maxsize;
}
© 版权声明
THE END
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容