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;
}

代码解析

  1. 队列类定义: 使用结构体 SqQueue 定义队列类,包含三个成员:
    • base: 指向动态分配数组的指针,用于存储队列元素。
    • front: 队列头指针。
    • rear: 队列尾指针。
  2. 初始化队列: InitQuene 函数用于初始化队列,动态分配数组空间并初始化头尾指针。
  3. 入队操作: EnQueue 函数负责将元素入队。
    • 首先判断队列是否已满,如果队列已满,则抛出 'Queue is full!' 异常。
    • 如果队列未满,则将元素插入队尾,并更新队尾指针。
  4. 出队操作: DeQueue 函数负责将元素出队。
    • 该函数用于演示出队操作,实际代码中需要添加队列空异常的判断。
  5. 异常处理: 在 main 函数中使用 try-catch 语句捕获入队操作可能抛出的异常,并将异常信息输出到错误流 cerr

总结

本文介绍了使用 C++ 实现有限队列类的基本方法,包括使用动态数组存储元素、处理队列满异常等。代码示例可以帮助读者理解队列的实现原理和异常处理机制。在实际应用中,还需要根据具体需求进行扩展和完善。


原文地址: https://www.cveoy.top/t/topic/nBiq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录