用循环数组自定义队列
来源:互联网 发布:知敬畏守底线心得 编辑:程序博客网 时间:2024/06/07 02:26
用循环数组自定义队列
/*利用循环数组构建队列*/#ifndef _SEQ_QUEUE_H_#define _SEQ_QUEUE_H_template<class T>class SeqQueue{public:SeqQueue(int max = 10);//指定队列大小~SeqQueue();//析构bool isEmpty()const;//判断是否为空bool isFull()const;//判断是否队列已满int size()const;//返回队列元素个数T front()const;//返回队头元素,不删除T back()const;//返回队尾元素,不删除bool push(const T& t);//添加元素到队列void pop();//删除队首元素private:int maxSize;//记录队列最大数目int nowFront;//nowfront + 1就是目前的队头int nowRear;//队尾int nowSize;//目前大小T * array;//队列动态数组};#endiftemplate<class T>SeqQueue<T>::SeqQueue(int max = 10) :maxSize(max), nowFront(-1), nowRear(-1), nowSize(0){array = new T[max];}template<class T>SeqQueue<T>::~SeqQueue(){delete[] array;}template<class T>bool SeqQueue<T>::isEmpty()const{if (nowSize == 0)return true;elsereturn false;}template<class T>bool SeqQueue<T>::isFull()const{if (nowSize == maxSize)return true;elsereturn false;}template<class T>int SeqQueue<T>::size()const{return nowSize;}template<class T>T SeqQueue<T>::front()const{if (!isEmpty()){return array[nowFront + 1];}}template<class T>T SeqQueue<T>::back()const{if (!isEmpty())return array[nowRear];}template<class T>bool SeqQueue<T>::push(const T& t){if (isFull())return false;else{nowSize++;nowRear = (++nowRear) % maxSize;//++一定要在前面array[nowRear] = t;
return true;}}template<class T>void SeqQueue<T>::pop(){if (isEmpty())return;else{nowFront = (++nowFront) % maxSize;nowSize--;T t;array[nowFront] = t;//重置原来的元素,这样也许可以将智能指针引用减一。return;}}
测试代码:
#include <iostream>#include <memory>#include "SeqQueue.h"using namespace std;class A{public:A(){ cout << "A construct!" << endl; }~A(){ cout << "A destruct!" << endl; }};void testSeqQueue(){SeqQueue<shared_ptr<A>> mQueue;for (int i = 0; i < 12; i++){mQueue.push(make_shared<A>());mQueue.pop();cout << mQueue.size() << endl;}}void main(){testSeqQueue();system("pause");}
测试结果:
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
A construct!
A destruct!
0
0 0
- 用循环数组自定义队列
- 用循环数组实现队列
- 用数组实现循环队列
- 用循环数组实现队列
- 用循环数组实现队列
- 队列--数组循环队列
- 队列----循环数组实现队列
- 用循环数组实现队列的方法
- 8.用定长数组 实现 循环队列
- java实现 用数组实现循环队列
- Java用循环数组实现队列
- 数组实现循环队列
- 3.循环队列(数组)
- 数组模拟循环队列
- 数组实现循环队列
- 循环数组实现队列
- 循环队列--数组实现
- 数组实现循环队列
- C++ 数据类型
- 腾讯2014软件开发笔试题目简答题
- 黑马程序员——C语言——数据类型的一些补充与小结
- C++文件操作成员函数及其使用说明
- 自己没有服务器也可以给软件推送数据
- 用循环数组自定义队列
- struts2学习
- 通用ViewHolder的写法
- Android AOSP 5.1.0 & 5.0.1源代码百度云下载
- Git使用基本方法(从远程服务器获取分支,提交修改)
- C++变量
- FFmpge解码的步骤 iOS平台
- Maven学习笔记(一)--maven的安装配置
- 蓝桥杯2015B组最后一题