队列是一个线性表,其插入和删除操作分别在表的不同端进行。添加元素的那一端被称为队尾,而删除元素的那一端被成为队首 。因为元素的存取符合先入先出的规则,因此又被称为FIFO(first int first out)。
主要属性包括
队列数组
数组的大小
队首的位置
队尾的位置
主要操作包括
队首删除元素
队尾添加元素
判断空
判断满
获取队首元素
获取队尾元素
构造函数
Queue(int size = 10) : _MaxSize(size) {
_queue = new value_type[_MaxSize];
_front = _rear = 0;
}
判断空
front和rear重合,注意front指向的是队首元素的前一个位置!
bool empty() {
return (_front == _rear);
}
判断满
看是否还能添加一个元素
bool full() {
return ((_rear + 1) % _MaxSize == _front);
}
获取队首元素
注意front指向的是第一个元素的前一个位置!
value_type &front() {
return _queue[(_front + 1) % _MaxSize];
}
获取队尾元素
value_type &back() {
return _queue[_rear];
}
添加元素
在队尾的后面添加,添加之前先判断是否已满。
Queue<value_type> &push(const value_type & value) {
if (full()) {
//抛出异常
}
_rear = (_rear + 1) % _MaxSize;
_queue[_rear] = value;
return *this;
}
删除元素
在队首的位置删除,删除之前判断是否为空。
Queue<value_type> &pop() {
if (empty()) {
//抛出异常
}
_front = (_front + 1) % _MaxSize;
return *this;
}