队列的初始化、入队列、出队列、判断队列是否为空、求队列长度和输出显示队列元素C++总代码
时间: 2023-12-24 12:24:45 浏览: 88
队列是一种线性数据结构,它具有先进先出(FIFO)的特点。循环队列是一种特殊的队列,它可以充分利用数组空间,避免了普通队列的假溢出现象。下面是C++实现循环队列的基本操作的代码:
```c++
#include <iostream>
using namespace std;
#define MAXQSIZE 100 //循环队列的最大长度
typedef int QElemType; //队列元素类型
typedef struct {
QElemType *base; //指向队列空间的指针
int front; //队头指针
int rear; //队尾指针
} SqQueue;
//初始化循环队列
void InitQueue(SqQueue &Q) {
Q.base = new QElemType[MAXQSIZE];
Q.front = Q.rear = 0;
}
//入队列
bool EnQueue(SqQueue &Q, QElemType e) {
if ((Q.rear + 1) % MAXQSIZE == Q.front) return false; //队列已满
Q.base[Q.rear] = e;
Q.rear = (Q.rear + 1) % MAXQSIZE;
return true;
}
//出队列
bool DeQueue(SqQueue &Q, QElemType &e) {
if (Q.front == Q.rear) return false; //队列为空
e = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXQSIZE;
return true;
}
//判断队列是否为空
bool QueueEmpty(SqQueue Q) {
if (Q.front == Q.rear) return true;
else return false;
}
//求队列长度
int QueueLength(SqQueue Q) {
return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}
//遍历输出队列
void QueueTraverse(SqQueue Q) {
cout << "当前队列为:";
if (Q.front == Q.rear) return;
while (Q.front != Q.rear) {
cout << Q.base[Q.front] << " ";
Q.front = (Q.front + 1) % MAXQSIZE;
}
cout << endl;
}
int main() {
SqQueue Q;
InitQueue(Q);
EnQueue(Q, 1);
EnQueue(Q, 2);
EnQueue(Q, 3);
QueueTraverse(Q);
QElemType e;
DeQueue(Q, e);
QueueTraverse(Q);
cout << "队列长度为:" << QueueLength(Q) << endl;
return 0;
}
```
阅读全文