当元素个数很大时,每一次移动都会造成成千上万的移动,一个积累一个,资源浪费的就很多很多了。
实现基本一样,我就把入队与出队说一下,其余的队列直接复制就可以。
注意:对头节点要与队尾节点中间保持有一个空节点。
循环队列入队原理
每一个要插入元素的地址都等于尾节点加一再取最大元素的余数:
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;
}