循环队列的基本操作算法思想
时间: 2023-11-06 21:09:16 浏览: 108
循环队列算法
循环队列是一种特殊的队列,它的队尾指针可以指向队列的开头,形成一个环形结构。循环队列的基本操作包括入队、出队和计算队列长度等。其算法思想如下:
1. 初始化队列:设置队头和队尾指针为0,表示队列为空。
2. 入队操作:将元素插入到队尾指针所指向的位置,并将队尾指针后移一位。如果队列已满,则无法插入元素。
3. 出队操作:将队头指针所指向的元素删除,并将队头指针后移一位。如果队列为空,则无法执行出队操作。
4. 计算队列长度:根据循环队列的结构特征,可以用公式(Q.rear-Q.front+ MAXSIZE)%MAXSIZE 直接计算出队列的长度。
下面是一个循环队列的基本操作算法实现:
①void main() //主函数
{
SqQueue Q;
InitQueue(&Q); //初始化队列
EnQueue(&Q, 1); //入队
EnQueue(&Q, 2);
EnQueue(&Q, 3);
PrintQueue(&Q); //输出队列元素
DeQueue(&Q); //出队
PrintQueue(&Q);
}
②int InitQueue(SqQueue *Q) //循环队列初始化
{
Q->front = Q->rear = 0;
return OK;
}
③int EnQueue(SqQueue *Q, int e) //循环队列入队
{
if ((Q->rear + 1) % MAXSIZE == Q->front) //队列已满
return ERROR;
Q->data[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXSIZE;
return OK;
}
④int DeQueue(SqQueue *Q) //循环队列出队
{
if (Q->front == Q->rear) //队列为空
return ERROR;
Q->front = (Q->front + 1) % MAXSIZE;
return OK;
}
⑤void PrintQueue(SqQueue *Q) //输出队列元素
{
int i = Q->front;
while (i != Q->rear)
{
printf("%d ", Q->data[i]);
i = (i + 1) % MAXSIZE;
}
printf("\n");
}
阅读全文