循环队列原理以及实现

当元素个数很大时,每一次移动都会造成成千上万的移动,一个积累一个,资源浪费的就很多很多了。

参考队列的原理以及实现

实现基本一样,我就把入队与出队说一下,其余的队列直接复制就可以。

注意:对头节点要与队尾节点中间保持有一个空节点。

循环队列入队原理
每一个要插入元素的地址都等于尾节点加一再取最大元素的余数:
SQ->rear=(SQ->rear+1)%MaxSize;
在这里插入图片描述

bool EnterQueque(SeqQueue* SQ, DataType data) {
 if (!SQ) return false;
 if (FullQueque(SQ)) {
  cout << "无法插入元素!" << data << "元素已满!" << endl;
  return false;
 }
 //插入元素
 //在队尾插入元素data
 SQ->quque[SQ->rear] = data;
 //队尾指针循环后移一位
 SQ->rear = (SQ->rear + 1) % MaxSize;
 return true;
}

出队
在这里插入图片描述

//出队,将队列中队头的元素data出队,出对后队头指针front后移一位
bool DeleteQueque(SeqQueue* SQ, DataType* data) {
 if (!SQ || EmptyQueque(SQ)) {
  cout << "队列为空!" << endl;
  return false;
 }
 if (!data) return false;
 *data = SQ->quque[SQ->fron];
 SQ->fron = (SQ->fron + 1) % MaxSize;
 return true;
}

其余实现完全相似于

猜你喜欢

转载自blog.csdn.net/qq_45140193/article/details/107949413