我是靠谱客的博主 含蓄黄蜂,最近开发中收集的这篇文章主要介绍C++用数组结构实现大小固定的队列,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 思路

队列的先进先出的,需要一个数组和4个变量size,end,start,length。size记录已经进来了多少个元素,end记录刚进来的元素应该放在哪个位置,start表示用户要求弹出的元素所在的位置。size的作用不止于此,它还是end与start的操作的关键信息,使得end与start解耦,避免的很多的麻烦,当end或者start到底部的时候就跳回0处。length是数组的长度,构造函数时候可以赋值。

2. 代码

// 固定数组实现队列结构

#include <iostream>
#include <exception>

class ArrayIndexOutOfBoundsException : public std::exception {
 public:
    ArrayIndexOutOfBoundsException(const char* ptr) {
        this -> ptr = ptr;
    }
    virtual const char* what() {
        std::cout << this -> ptr << std::endl;
        return ptr;
    }
 private:
    const char* ptr;
};

class MyQueue {
 public:
     MyQueue(int myqueue_size_); // 构造函数
     ~MyQueue();    // 析构函数
     void myMyQueuePush(int element); // 入队列
     int myMyQueuePop();  // 出队列
     int myMyQueuePeek(); // 获取队列顶元素
     void printMyQueue();   // 打印队列
 private:
    int* mydata_;
    int myqueue_size_;  // 队列的大小
    int myqueue_index_; // 队列当前的索引
    int myqueue_end_;   // push时候++
    int myqueue_start_;  // pop时候--
};

MyQueue::MyQueue(int myqueue_size_) {
    this -> myqueue_size_ = myqueue_size_;
    mydata_ = new int[myqueue_size_];
    myqueue_index_ = 0;
    myqueue_end_ = 0;
    myqueue_start_ = 0;
}
MyQueue::~MyQueue() {
    delete [] mydata_;
}
void MyQueue::myMyQueuePush(int element) {
    if (myqueue_index_ == myqueue_size_) {
        throw ArrayIndexOutOfBoundsException("queue is full");
    } else {
        ++myqueue_index_;
        mydata_[myqueue_end_] = element;
        myqueue_end_ = myqueue_end_ == myqueue_size_ - 1 ? 0 : myqueue_end_ + 1;    // 如果一个轮回的话end自动变成0
    }
}
int MyQueue::myMyQueuePop() {
    if (myqueue_index_ == 0) {
        throw ArrayIndexOutOfBoundsException("queue is empty");
    } else {
        --myqueue_index_;
        int tmp = myqueue_start_;   // 保持当前的变量
        myqueue_start_ = myqueue_start_ == myqueue_size_ - 1 ? 0 : myqueue_start_ + 1;  // 如果已经经历一个轮回的话start变成0
        return mydata_[tmp];
    }
}
int MyQueue::myMyQueuePeek() {
    if (myqueue_index_ == 0) {
        return -1;
    } else {
        return mydata_[myqueue_start_];
    }
}
void MyQueue::printMyQueue() {
    for (int i = 0; i < myqueue_size_; ++i) {
        std::cout << mydata_[i] << ',';
    }
    std::cout << "n";
}
int main() {
    MyQueue myQueue1(5);
    myQueue1.myMyQueuePush(1);
    myQueue1.myMyQueuePush(2);
    myQueue1.myMyQueuePush(3);
    myQueue1.myMyQueuePush(4);
    myQueue1.myMyQueuePush(5);

    myQueue1.printMyQueue();
    for (int i  = 0; i < 5; ++i) {
        std::cout << "pop=" << myQueue1.myMyQueuePop() << ",";
        std::cout << std::endl;
    }
    myQueue1.printMyQueue();
    return 0;
}

在这里插入图片描述

3. 参考文献

  1. C++用数组实现一个固定大小的栈/队列
  2. 用数组结构实现大小固定的栈和队列
  3. C++用数组结构实现大小固定的栈

最后

以上就是含蓄黄蜂为你收集整理的C++用数组结构实现大小固定的队列的全部内容,希望文章能够帮你解决C++用数组结构实现大小固定的队列所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(27)

评论列表共有 0 条评论

立即
投稿
返回
顶部