SqQueue循环队列的 顺序存储实现


//---循环队列----队列的顺序存储结构-----
#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循环队列的 顺序存储实现)