queue.h
#ifndef QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED
#include <iostream>
using namespace std;
void runQueueDemo();
void runQueueDemo2();
template<class T> class ArrayQueue{
public:
ArrayQueue();
~ArrayQueue();
void add(T t);
T front();
T pop();
int size();
int is_empty();
private:
T *arr;
int count;
};
#endif // QUEUE_H_INCLUDED
queue.cpp
#include "queue.h"
#include<queue>
// 创建队列,默认大小为12
template<class T>
ArrayQueue<T>::ArrayQueue(){
arr = new T[12];
if(!arr) {
cout<<"arra malloc error!"<<endl;
}
}
//销毁队列
template<class T>
ArrayQueue<T>::~ArrayQueue()
{
if(arr) {
delete[] arr;
arr = NULL;
}
}
//将val添加到队列的末尾
template<class T>
void ArrayQueue<T>::add(T t)
{
arr[count++] = t;
}
template<class T>
T ArrayQueue<T>::front()
{
return arr[0];
}
// 返回队列开头元素
template<class T>
T ArrayQueue<T>::pop()
{
int i = 0;
T ret = arr[0];
count--;
while(i++<count){
arr[i-1] = arr[i];
}
return ret;
}
//返回队列的大小
template<class T>
int ArrayQueue<T>::size()
{
return count;
}
//返回队列是否为空
template<class T>
int ArrayQueue<T>::is_empty(){
return count == 0;
}
void runQueueDemo(){
int tmp=0;
ArrayQueue<int> *astack = new ArrayQueue<int>();
//将10,20,30,依次推入到队列中
astack->add(10);
astack->add(20);
astack->add(30);
//将队列开头元素赋值给tmp,并删除该元素
tmp = astack->pop();
cout<<"tmp ="<<tmp<<endl;
//只将队列开头的元素赋值给tmp,不删除该元素
tmp = astack->front();
cout<<"tmp="<<tmp<<endl;
astack->add(40);
cout<<"is_empty()="<<astack->is_empty()<<endl;
cout<<"size()="<<astack->size()<<endl;
while(!astack->is_empty()) {
tmp = astack->pop();
cout<<tmp<<endl;
}
}
void runQueueDemo2(){
int tmp=0;
queue<int> iqueue;
//将10,20,30依次加入队列的末尾
iqueue.push(10);
iqueue.push(20);
iqueue.push(30);
//删除队列开头的元素
iqueue.pop();
//将队列开头的元素赋值给tmp,不删除该元素
tmp = iqueue.front();
cout<<"tmp="<<tmp<<endl;
//将40加入队列的末尾
iqueue.push(40);
cout<<"empty() =="<<iqueue.empty()<<endl;
cout<<"size()="<<iqueue.size()<<endl;
while(!iqueue.empty()) {
tmp = iqueue.front();
cout<<tmp<<endl;
iqueue.pop();
}
}