C++动态数组实现队列

//Implementation of queue using dynamic array
#ifndef QUEUE_H
#define QUEUE_H

#include <iostream>
using namespace std;

template<typename T> class Queue
{
public:
int queueHead;
int queueTail;
int capacity;
T *arr;

bool isEmpty()
{
if(queueHead == queueTail)
return true;
else
return false;
}
bool isFull()
{
if(queueHead == (queueTail+1)%capacity)
return true;
else
return false;
}
int size()
{
return (capacity+queueTail-queueHead)%capacity;
}
void enQueue(T x)
{
if(isFull())
{
int index = 0;
capacity <<= 1;
T *temparr = new T[capacity];
for(int i=0;i<size();i++)
{
index = queueHead+i;
temparr[i] = arr[index];
}
delete[] arr;
arr = temparr;
queueTail = size();
queueHead = 0;
}
arr[queueTail] = x;
queueTail = (queueTail+1)%capacity;
}
T deQueue()
{
if(!isEmpty())
{
int preQueueHead = queueHead;
queueHead = (queueHead+1)%capacity;
return arr[preQueueHead];
}
else
{
cout<<"Queue underflow!"<<endl;
return NULL;
}
}
T getHead()
{
if(!isEmpty())
{
return arr[queueHead];
}
else
{
cout<<"Queue is empty!"<<endl;
return NULL;
}
}
T getTail()
{
if(!isEmpty())
{
return arr[(queueTail-1)%capacity];
}
else
{
cout<<"Queue is empty!"<<endl;
return NULL;
}
}
void show()
{
if(isEmpty())
cout<<"Queue is empty!"<<endl;
else
{
int index = 0;
for(int i=0;i<size();i++)
{
index = (queueHead+i)%capacity;
cout<<arr[index]<<" ";
}
cout<<endl;
}
}
Queue()
{
capacity = 10;
arr = new T[capacity];
queueHead = 0;
queueTail = 0;
}

Queue(int cap)
{
if (cap<=0)
{
cout<<"Capacity should be positive! Initialize the queue by default."<<endl;
capacity = 10;
}
else
{
capacity = cap;
}
arr = new T[capacity];
queueHead = 0;
queueTail = 0;
}
~Queue()
{
delete[] arr;
}
};
#endif

 

转载于:https://www.cnblogs.com/sirui/archive/2013/06/08/3126909.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值