队列

队列

1、队列值允许在表的队尾进行插入,在表对头进行删除。队列具有先进先出的特性。(队尾入数据,队头出数据

2、具体实现(单链表)

节点定义:

template<class T>
struct Node
{
public:
	Node(const T& x)
		:_data(x)
		,_next(NULL)
	{}
public:
	T _data;
	Node<T>* _next;
};

函数声明:

template<class T>
class Queue
{
public:
	Queue();
	~Queue();//析构函数不能光声明不定义,这样编译不通过,切记
public:
	void Push(const T& x);
	void Pop();
	bool Empty();
	size_t Size();
	T& Front();
	T& Back();
protected:
	void Clear();
protected:
	Node<T>* _head;
	Node<T>* _tail;
	size_t _size;
};

函数定义:

template<class T>
Queue<T>::Queue()
	:_head(NULL)
	, _tail(NULL)
{
	cout << "Queue()" << endl;
}


template<class T>
void Queue<T>::Clear()
{
	Node<T>* cur = _head;
	while (cur!=NULL)
	{
		Node<T>* del = cur;
		cur = cur->_next;
		delete del;
	}
	_head = NULL;
	_tail = NULL;
	_size = 0;
}

template<class T>
Queue<T>::~Queue()
{
	cout << "~Queue" << endl;
	Clear();
}

template<class T>
void Queue<T>::Push(const T& x)
{
	if (_head == NULL)
	{
		_head = _tail = new Node<T>(x);
	}
	else
	{
		_tail->_next = new Node<T>(x);
		_tail = _tail->_next;
	}
	++_size;
}


template<class T>
void Queue<T>::Pop()
{
	assert(_head != NULL);
	if (_head == _tail)
	{
		delete _head;
		_head = _tail = NULL;
	}
	else
	{
		Node<T>* del = _head;
		_head = _head->_next;
		delete del;
	}
	--_size;
}


template<class T>
bool Queue<T>::Empty()
{
	return _head == NULL;
}


template<class T>
size_t Queue<T>::Size()
{
	return _size;
}


template<class T>
T& Queue<T>::Front()
{
	assert(_head);
	return _head->_data;
}


template<class T>
T& Queue<T>::Back()
{
	assert(_tail != NULL);
	return _tail->_data;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值