//---循环队列----队列的顺序存储结构-----
#define MAX_QSIZE 100 // z最大队列长度
typedef int ElemType;
typedef struct {
ElemType *base;
int front; //头指针,若队列不空则指向队列头元素
int rear; //尾指针,若队列不空,指向队列尾元素的下一个元素
} SqQueue;
int
InitQueue(SqQueue &Q) {
Q.base = (ElemType *)malloc(MAX_QSIZE * sizeof(ElemType));
if (!Q.base) return -1; //存储分配失败
Q.front = 0;
Q.rear = 0;
return 0;
}
int
QueueLength(SqQueue Q) {
return(Q.rear - Q.front +MAX_QSIZE) % MAX_QSIZE;
}
/**
* 插入元素 e 为Q的新的尾元素
*
* @param Q
* @param e
*
* @return -1 队列满; 0 成功
*/
int
EnQueue(SqQueue &Q, ElemType e) {
if ((Q.rear +1) % MAX_QSIZE == Q.front)
return -1;
Q.base[Q.rear] = e;
Q.rear = (Q.rear +1) %MAX_QSIZE;
return 0;
}
/**
* 若队列不空,则删除Q的队头元素,用e返回其值,并返回 1.
*
* @param Q
* @param e
*
* @return -1 失败; 0 成功
*/
int
Dequeue(SqQueue &Q ,ElemType &e) {
if (Q.front == Q.rear) return -1;
e = Q.base[Q.front];
Q.front = (Q.front+1) % MAX_QSIZE;
return 0;
}
SqQueue循环队列的 顺序存储实现
最新推荐文章于 2022-07-18 00:10:46 发布