c++队列类的简单实现

同样是一个小作业,只做了一部分,有待完善


#ifndef QUEUE_H
#define QUEUE_H
///
#include<iostream>
//声明一个Queue模板类
template <class	T> class Queue;

//定义一个节点类
template <class T>
class qItem
{
	friend class Queue<T>;
	qItem(const T &t):item(t),next(0){}	//构造函数
	T item;//存储数据
	qItem *next;//指向下一个节点
};
//Queue类的定义
template<class T>class Queue
{
	public:	
		Queue():head(0),tail(0),length(0){}//默认构造函数
		Queue(const Queue& temp):head(0),tail(0),length(0)
										{copy(temp);}			//复制构造函数
		Queue& operator=(const Queue&);
		~Queue(){destroy();}	//析构函数
		//访问队首
		T front()
		{
			if(empty())
				throw "front:空队!\n";
			return head->item;
		}	
		const T front()const
		{
			if(empty())
				throw "front:空队!\n";
			return head->item;
		}
		void push(const T&);			//插入队尾
		T pop();						//删除队首,返回值
		int  getLength();				//队列长度
		bool empty()const{return head==0;}//判断队列是否为空
	private:
		qItem<T> *head;		//指向队首
		qItem<T> *tail;		//指向队尾
		void destroy();		//删除所有元素,永远析构函数
		void copy(const Queue&);		//复制所有元素
		int length;	//队列长度
};

//Queue类的实现
//删除所有元素
template<class T> void Queue<T>::destroy()
{
	while(!empty())
		pop();
}
//删除队首
template <class T>T Queue<T>::pop()
{
	if(empty())
		throw "空队!不能删除\n";
	qItem<T> *temp=head;//指向队首
	T val=front();
	head=head->next;//指向后位
	delete temp;//删除原队首
	temp=NULL;
	length--;
	return val;
}
//入队
template<class T> void Queue<T>::push(const T&value)
{
	
	qItem<T> *newItem=new qItem<T>(value);//创建一个新项
	if(newItem==NULL)
		throw "push:内存分配失败!\n";
	//如果空队,直接放入
	if(empty())
	{
		head=tail=newItem;
		length++;
	}
	//非空则放入队尾
	else	
	{
		tail->next=newItem;
		tail=newItem;
		length++;
	}
}
//复制元素
template<class T> void Queue<T>::copy(const Queue&old)
{
	if(old.empty())
		throw "copy:空队!不能复制\n";
	qItem<T> *pt=old.head;
	while(pt)
	{
		push(pt->item);
		length++;
		pt=pt->next;
	}
	
}
//队列长度
template <class T> int Queue<T>::getLength()
{
	return length;
}
#endif



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值