队列(queue)的模板类及其成员函数的实现

队列(queue)是先进先出的数据结构,存储方式可以是数组也可以是链表。如果用数组存储,一般采用循环队列的方式。

所以需记住几个关键点:

队头指针进1:front = (front+1)%maxsize

队尾指针进1:rear = (rear+1)%maxsize

判断队空:front = rear

判断队满:front = (rear+1)%maxsize,这里,队满的时候队尾和队头之间空有一个元素,以此来避免和front=rear混淆

定义头文件

/*队列用数组存储的一般用循环队列
  front = (front+1)%maxsize
  rear = (rear+1)%maxsize
  队头指向存储的第一个元素,而队尾指向的是存储的最后一个元素的下一个位置
  所以,在队列满的时候,队头和队尾之间是空有一个元素的,否则当front==rear时,
  会混淆满队和空队
  空队:front == rear
  满队:(rear+1)%maxsize ==front
*/

#include <assert.h>
#include<iostream>
using namespace std;

template<class T>
class SeqQueue{
public:
	SeqQueue(int sz=50);
	~SeqQueue();
	bool EnQueue(const T& x);
	bool DeQueue();
	T getFront(); //获取队头元素
	bool makeEmpty(){front = rear =0; return true;}
	bool isEmpty()const{return (front==rear)?true:false;}
	bool isFull()const{return ((rear+1)%maxsize==front)?true:false;}
	int getsize()const{return (rear-front+maxsize)%maxsize;}  //获取队列元素个数
private:
	int front,rear;
	T* element;
	int maxsize;
};


成员函数的实现

#include "queue.h"

template<class T>
SeqQueue<T>::SeqQueue(int sz):maxsize(sz):front(0):rear(0){
	element = new T[maxsize];
	assert(element!=NULL);
}

template<class T>
bool SeqQueue<T>::EnQueue(const T& x){
	if(isFull()==true)return false;
	element[rear]=x;
	rear = (rear+1)%maxsize;
	return true;
}

template<class T>
bool SeqQueue<T>::DeQueue(){
	if(isEmpty()==true)return false;
	T x = element[front];
	front = (front+1)%maxsize;
	delete x;
	return true;
}

template<class T>
T SeqQueue<T>::getFront(){
	if(isEmpty()==true)return -1;
	return element[front];
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值