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 -1;
    }   //判断是否为 队满
    Q.base[Q.rear] = e;    //新元素插入队尾
    Q.rear = (Q.rear + 1) % MAXQSIZE;   //队尾指针向上移动
    return 0;
}

//出队算法(循环队列)
Statue DeQueue(SqQueue& Q) {
    if (Q.front == Q.rear) {
        throw 'deserse ERROR';
    }
    Q.front = (Q.front + 1) % MAXQSIZE;  //队头指针向上移动
    return 0;
}

void fun_EnQueue() {    //当队列满时,添加元素,抛出一个队列满异常
    SqQueue Q;
    InitQuene(Q);
    int i;
    for (i = 0;i < 6;i++) {
        EnQueue(Q, i);
    }
    for (i = 0;i < MAXQSIZE;i++) {
        cout << Q.base[i] << endl;
    }
}

/*当队列 满 时, 添加 元素, 就抛出一个 队列满异常;
  当队列 空 时, 取出 元素, 就抛出一个 队列空异常。*/

void main()
{
    SqQueue Q;
    InitQuene(Q);
    fun_EnQueue();
    int e = 7;
    try {
        EnQueue(Q, e);
    }
    catch (...) {    //捕获所有异常
        cout << '队列满异常' << endl;
    }
    
    try {
        DeQueue(Q);
    } catch (...) {
        cout << '队列空异常' << endl;
    }
    cout << 'Hello World!' << endl;
}

代码解释:

  1. 队列定义:
    • SqQueue 结构体定义了队列的基本属性:base 指向动态分配的数组空间,frontrear 指向队头和队尾位置。
  2. 初始化队列:
    • InitQuene 函数动态分配一个大小为 MAXQSIZE 的数组空间,并将队头和队尾指针初始化为 0。
  3. 入队操作:
    • EnQueue 函数判断队列是否已满,如果满则抛出异常 -1;否则将新元素插入队尾,并将队尾指针后移。
  4. 出队操作:
    • DeQueue 函数判断队列是否为空,如果空则抛出异常 'deserse ERROR';否则将队头指针后移,实现出队操作。
  5. 测试代码:
    • 测试代码演示了入队和出队操作,并分别在队列满和队列空时尝试入队和出队操作,以测试异常处理机制。

注意:

  • 代码中使用 catch(...) 捕获所有异常,这在实际应用中可能并不安全,建议根据具体情况捕获特定类型的异常。
  • 出队操作中,没有返回出队元素,而是直接将队头指针后移。

改进建议:

  • 可以添加一个函数 IsEmpty 来判断队列是否为空。
  • 可以添加一个函数 IsFull 来判断队列是否已满。
  • 可以考虑将 MAXQSIZE 改为可变参数,使其更灵活。

希望以上内容能帮助您理解有限容量队列的实现原理以及如何使用 C++ 实现它。', 'content_json': {'title': 'C++ 实现有限容量队列:动态数组存储,异常处理', 'description': '本文介绍使用 C++ 实现一个有限容量队列,并使用动态数组存储队列元素。代码中包含队列满异常和队列空异常的处理,以及测试代码。', 'keywords': 'C++, 队列, 循环队列, 动态数组, 异常处理, 队列满异常, 队列空异常', 'content': '## 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 -1;
    }   //判断是否为 队满
    Q.base[Q.rear] = e;    //新元素插入队尾
    Q.rear = (Q.rear + 1) % MAXQSIZE;   //队尾指针向上移动
    return 0;
}

//出队算法(循环队列)
Statue DeQueue(SqQueue& Q) {
    if (Q.front == Q.rear) {
        throw 'deserse ERROR';
    }
    Q.front = (Q.front + 1) % MAXQSIZE;  //队头指针向上移动
    return 0;
}

void fun_EnQueue() {    //当队列满时,添加元素,抛出一个队列满异常
    SqQueue Q;
    InitQuene(Q);
    int i;
    for (i = 0;i < 6;i++) {
        EnQueue(Q, i);
    }
    for (i = 0;i < MAXQSIZE;i++) {
        cout << Q.base[i] << endl;
    }
}

/*当队列 满 时, 添加 元素, 就抛出一个 队列满异常;
  当队列 空 时, 取出 元素, 就抛出一个 队列空异常。*/

void main()
{
    SqQueue Q;
    InitQuene(Q);
    fun_EnQueue();
    int e = 7;
    try {
        EnQueue(Q, e);
    }
    catch (...) {    //捕获所有异常
        cout << '队列满异常' << endl;
    }
    
    try {
        DeQueue(Q);
    } catch (...) {
        cout << '队列空异常' << endl;
    }
    cout << 'Hello World!' << endl;
}

代码解释:

  1. 队列定义:
    • SqQueue 结构体定义了队列的基本属性:base 指向动态分配的数组空间,frontrear 指向队头和队尾位置。
  2. 初始化队列:
    • InitQuene 函数动态分配一个大小为 MAXQSIZE 的数组空间,并将队头和队尾指针初始化为 0。
  3. 入队操作:
    • EnQueue 函数判断队列是否已满,如果满则抛出异常 -1;否则将新元素插入队尾,并将队尾指针后移。
  4. 出队操作:
    • DeQueue 函数判断队列是否为空,如果空则抛出异常 'deserse ERROR';否则将队头指针后移,实现出队操作。
  5. 测试代码:
    • 测试代码演示了入队和出队操作,并分别在队列满和队列空时尝试入队和出队操作,以测试异常处理机制。

注意:

  • 代码中使用 catch(...) 捕获所有异常,这在实际应用中可能并不安全,建议根据具体情况捕获特定类型的异常。
  • 出队操作中,没有返回出队元素,而是直接将队头指针后移。

改进建议:

  • 可以添加一个函数 IsEmpty 来判断队列是否为空。
  • 可以添加一个函数 IsFull 来判断队列是否已满。
  • 可以考虑将 MAXQSIZE 改为可变参数,使其更灵活。

希望以上内容能帮助您理解有限容量队列的实现原理以及如何使用 C++ 实现它。


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

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