3.3.2 队列的存储表示和操作的实现 二、循环队列 循环队列的结构定义如下: typedef struct { ElemType *elem; // 存储空间基址 int rear; // 队尾指针 int front; // 队头指针 int queuesize; // 允许的最大存储空间,以元素为单位 } Queue; 类似于顺序栈和链栈,除了循环队列的初始化需要添加一个"最大容量"的参数之外,循环队列和链队列的基本操作接口基本相同。 以下是链队列的主要操作的函数定义。 |
||||||||||
void InitQueue (Queue &Q,int maxsize ) { // 构造一个最大存储空间为 maxsize 的空队列 Q if (maxsize == 0) maxsize = MAXLISTSIZE; Q.elem = new ElemType[maxsize]; // 为循环队列分配存储空间 if (!Q.elem) exit(1); // 存储分配失败 Q.queuesize = maxsize; Q.front = Q.rear = 0; } // InitQueue |
对顺序存储结构,都需要预先分配一个可以使用的最大空间,和以前所讨论的顺序表和顺序栈一样,在循环队列的初始化函数中,也是由使用者来确定程序中所需要的队列最大容量。 |
|||||||||
bool DeQueue (Queue &Q, ElemType &e) { // 若队列不空,则删除当前队列Q中的头元素,用 e 返回其值 // 并返回TRUE;否则返回 FALSE if (Q.front == Q.rear) return FALSE; e = Q.elem[Q.front]; Q.front = (Q.front+1) % Q.queuesize; return TRUE; } |
|