简单循环队列模版(数组实现)

用数组写的一个循环队列的模版,功能是常用的那几个功能。

文件"myqueue.h"

#define QUEUE_INIT_SIZE 100 //队列初始化时分配的最大容量 #define QUEUE_INCREMENT 10 //队列满时,扩充的容量 #include<iostream> using namespace std; template<class T> class My_queue { private: T *elem; int head; //头 int rear; //尾 int queue_size; //队列容量 int increment_size; //每次扩充容量 public: My_queue(int maxsize=QUEUE_INIT_SIZE,int incresize=QUEUE_INCREMENT) { elem=new T[maxsize]; head=0; rear=0; queue_size=maxsize; increment_size=incresize; } void Increment_Queue() //对队列进行扩充,并将原队列内容全部复制 { T *a; a=new T[queue_size+increment_size]; for(int i=0;i<queue_size;i++) a[i]=elem[i]; delete[]elem; elem=a; head=0; rear=queue_size-1; queue_size+=increment_size; delete[]a; } bool empty() { return (rear==head); } int size() { int length=0; length=(rear-head+queue_size)%queue_size; return length; } void push(T data) { if( (rear+1)%queue_size==head )//判断循环队列是否满的条件 Increment_Queue(); elem[rear]=data; rear=(rear+1)%queue_size; } T front() { if(empty()) { cout<<"queue is empty."<<endl; exit(0); } T data=elem[head]; return data; } T back() { if(empty()) { cout<<"queue is empty."<<endl; exit(0); } int pos=(rear-1)%queue_size; T data=elem[pos]; return data; } void pop() { head=(head+1)%queue_size; } void clean() { delete[]elem; } };


测试代码"main.cpp"

#include"myqueue.h" int main() { My_queue<char> q; if(q.empty()) cout<<"queue is empty!"<<endl; q.push('L'); q.push('O'); q.push('V'); q.push('E'); cout<<"queue's size is : "<<q.size()<<endl; cout<<"queue's last element is : "<<q.back()<<endl; q.push('U'); cout<<"Now queue's size is : "<<q.size()<<endl; while(!q.empty()) { cout<<q.front(); q.pop(); } cout<<endl; cout<<q.size()<<endl; return 0; }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值