为什么静态队列必须是循环队列?
静态队列也就是用数组实现的队列,在非空队列中,头指针指向队头元素,尾指针指向队列尾元素的下一个位置,对于非循环队列来说,假设为队列分配的最大空间为6,当尾指针指向第7个元素的位置时,不可再继续插入新的队尾元素,否则会因数组越界而导致程序代码被破坏,而此时又不宜如顺序栈那样,进行存储再分配扩大数组空间。因为队列的实际可用空间并未占满,一个巧妙的方法是将顺序队列臆造为一个环状的空间,称为循环队列

如何判断循环队列空间是满还是空
可有两种方法:其一是另设一个标志位以区别队列是空还是满;其二是少用一个元素怒空间,约定以“队列透支很在队列为指着的下一位上作为呈满状态的标志”,常用的为第二种

什么时候用循环队列,什么时候用链式队列
如果用户的应用程序中设有循环队列,则必须为它设定一个最大队列长度;若用户无法估计所用队列的最大长度,则宜采用连队列
循环队列出队和入队算法演示


循环队列的实现
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define MAX_QSIZE 5 //最大队列长度加一
//队列的顺序存储结构(循环队列)
typedef struct Queue
{
int *base; //初始化的动态分配存储空间
int front; //头指针,若队列不为空,指向队列头元素
int rear; //尾指针,若队列不为空,指向队列尾元素的下一个元素
}QUEUE,*PQUEUE;
void Init(PQUEUE pQ); //构造一个空的循环队列
void Destroy(PQUEUE pQ);//销毁队列
void Clear(PQUEUE pQ); //清空队列
bool Empty(PQUEUE pQ); //判断队列是否为空
int Length(PQUEUE pQ); //返回队列长度
bool GetHead(PQUEUE pQ,int *e);//用e保存队头元素
bool Enqueue(PQUEUE pQ,int val);//入队
bool

本文探讨了静态队列为何需要使用循环结构的原因,避免数组越界问题。同时,解释了如何判断循环队列的满与空状态,通常采用少用一个元素空间作为标志。文章还讨论了循环队列与链式队列的选择场景,并给出了循环队列出队和入队的算法演示。最后,介绍了循环队列的具体实现方法。

8910

被折叠的 条评论
为什么被折叠?



