概述
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. 参考文献
- C++用数组实现一个固定大小的栈/队列
- 用数组结构实现大小固定的栈和队列
- C++用数组结构实现大小固定的栈
最后
以上就是含蓄黄蜂为你收集整理的C++用数组结构实现大小固定的队列的全部内容,希望文章能够帮你解决C++用数组结构实现大小固定的队列所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复