C++实现有限队列类:动态数组存储,处理队列满异常
C++ 实现有限队列类:动态数组存储,处理队列满异常
本文将介绍使用 C++ 实现一个有限队列类,该队列类采用动态数组存储队列元素,并通过异常机制处理队列满的情况。
代码实现
#include <iostream>
using namespace std;
#define OK 0
typedef int QElmeType;
typedef int Statue;
#define MAXQSIZE 6
typedef struct {
QElmeType* base; //基地址,动态分配存储空间
int front; //头指针
int rear; //尾指针
}SqQueue;
//初始化队列
Statue InitQuene(SqQueue& Q) {
Q.base = new QElmeType[MAXQSIZE];
//动态数组,为队列分配一个最大容量为MAXQSIZE的数组空间
if (Q.base == NULL) {
exit(OVERFLOW);
} //判断空间是否分配成功
Q.front = 0;
Q.rear = 0;
return OK;
}
//入队操作(循环队列)
Statue EnQueue(SqQueue& Q,int e) {
if ((Q.rear + 1) % MAXQSIZE == Q.front) { //队列满,抛出异常
throw 'Queue is full!';
}
Q.base[Q.rear] = e; //新元素插入队尾
Q.rear = (Q.rear + 1) % MAXQSIZE; //队尾指针向上移动
cout << Q.base[Q.front] << endl;
return 0;
}
//出队算法(循环队列)
Statue DeQueue(SqQueue& Q, int e) {
e = Q.base[Q.front]; //保存队头元素
Q.front = (Q.front + 1) % MAXQSIZE; //队头指针向上移动
return 0;
}
void fun_EnQueue() { //当队列满时,添加元素,抛出一个队列满异常
SqQueue Q;
InitQuene(Q);
for (int i = 0;i < 6;i++) {
EnQueue(Q, i);
}
for (int i = 0;i < 6;i++) {
cout << Q.base[i] << endl;
}
}
/*当队列 满 时, 添加 元素, 就抛出一个 队列满异常;
当队列 空 时, 取出 元素, 就抛出一个 队列空异常。*/
int main()
{
try {
fun_EnQueue();
}
catch (const char* msg) {
cerr << msg << endl;
}
cout << 'Hello World!\n';
return 0;
}
代码解析
- 队列类定义: 使用结构体
SqQueue定义队列类,包含三个成员:base: 指向动态分配数组的指针,用于存储队列元素。front: 队列头指针。rear: 队列尾指针。
- 初始化队列:
InitQuene函数用于初始化队列,动态分配数组空间并初始化头尾指针。 - 入队操作:
EnQueue函数负责将元素入队。- 首先判断队列是否已满,如果队列已满,则抛出
'Queue is full!'异常。 - 如果队列未满,则将元素插入队尾,并更新队尾指针。
- 首先判断队列是否已满,如果队列已满,则抛出
- 出队操作:
DeQueue函数负责将元素出队。- 该函数用于演示出队操作,实际代码中需要添加队列空异常的判断。
- 异常处理: 在
main函数中使用try-catch语句捕获入队操作可能抛出的异常,并将异常信息输出到错误流cerr。
总结
本文介绍了使用 C++ 实现有限队列类的基本方法,包括使用动态数组存储元素、处理队列满异常等。代码示例可以帮助读者理解队列的实现原理和异常处理机制。在实际应用中,还需要根据具体需求进行扩展和完善。
原文地址: https://www.cveoy.top/t/topic/nBiq 著作权归作者所有。请勿转载和采集!