什么是队列
队列(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
暂无评论内容