队列

顺序循环队列

  • 在判断队空和队满时有3种方法,看教材
  • 这里列举其中一种
#pragma once

#include <stdio.h>

#define maxSize 100

typedef int ElemType;
typedef struct {
    int rear, front; //front指向队头第一个,rear指向队尾的下一个
    ElemType data[maxSize];
} SeqQueue;

//初始化
void initQueue(SeqQueue &q) {
    q.front = q.rear = 0;
}

//判断空
bool isEmpty(SeqQueue q) {
    return q.rear == q.front;
}

//入队
bool enQueue(SeqQueue &q, ElemType x) {
    if ((q.rear + 1) % maxSize == q.front) return false; //已满的情况
    q.data[q.rear] = x;
    q.rear %= maxSize;
    return true;
}

//出队
bool deQueue(SeqQueue &q, ElemType &x) {
    if (q.rear == q.front) return false;
    x = q.data[q.front];
    q.front = (q.front + 1) % maxSize;
    return true;
}

//获取队头元素
ElemType getTop(SeqQueue q) {
    if (q.rear == q.front) return false;
    return q.data[q.front];
}

//计算对内元素的个数
int getNum(SeqQueue q){
    return (q.rear + maxSize -q.front) % maxSize;
}

链式队列

上一篇:第三章_下(队列)


下一篇:对应每一章的数据结构代码6