顺序循环队列
- 在判断队空和队满时有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;
}
链式队列