#include <iostream>
using namespace std;
#define MAXSIZE 5
typedef struct {
int *base; // 存储空间的基指针
int front; // 头指针
int rear; // 尾指针
}SqQueue;
// 初始化
bool initQueue(SqQueue &Q) {
Q.base = new int[MAXSIZE];
if (!Q.base) {
return false;
}
Q.front = Q.rear = 0; // 初始化为0,队列为空
return true;
}
// 返回Q的元素个数
int QueueLength(SqQueue Q) {
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
// 判空
bool isEmpty(SqQueue Q) {
if (Q.rear == Q.front) {
return true;
} else {
return false;
}
}
// 判满
bool isFull(SqQueue Q) {
if ((Q.rear + 1) % MAXSIZE == Q.front) {
return true;
} else {
return false;
}
}
// 入队
bool enQueue(SqQueue &Q, int e) {
if (isFull(Q)) {
return false;
}
Q.base[Q.rear] = e;
Q.rear = (Q.rear + 1) % MAXSIZE;
return true;
}
// 出队
bool deQueue(SqQueue &Q, int &e) {
if (isEmpty(Q)) {
return false;
}
e = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXSIZE;
return true;
}
// 队头元素
int getHead(SqQueue Q) {
if (!isEmpty(Q)) {
return Q.base[Q.front];
}
return -1;
}
int main() {
SqQueue Q;
initQueue(Q);
for (int i = 1; i <= 5; ++i) {
if (enQueue(Q, i)) {
cout << "入队元素:" << i << " 队头元素:" << getHead(Q) << endl;
} else {
cout << "入队失败" << endl;
}
}
cout << "循环队列的大小:" << QueueLength(Q) << endl;
int e;
for (int i = 1; i <= 5; ++i) {
if (deQueue(Q, e)) {
cout << "队尾元素:" << e << "队头元素:" << getHead(Q) << endl;
} else {
cout << "出队失败" << endl;
}
}
return 0;
}
[数据结构]--循环队列的顺序表示
最新推荐文章于 2022-09-16 14:27:21 发布