C++ STL 队列容器的遍历输出方法

通常情况下我们可以使用自己写好的类模板来实现链队列:

/**********************************链队列的实现********************************/
template<class QElemType>
class LinkQueue;

template<class QElemType>
class QNode {
protected:
	QElemType	data;
	QNode<QElemType>	*next;
public:
	friend class LinkQueue<QElemType>;
};

template<class QElemType>
class LinkQueue {
protected:
	QNode<QElemType>	*front;
	QNode<QElemType>	*rear;
public:
	LinkQueue();
	virtual	~LinkQueue();
	Status	EnQueue(QElemType e);
	Status	DeQueue(QElemType &e);
	void	PrintQueue();
	int	QueueLength();
	Status	QueueEmpty();
};

template<class QElemType>
LinkQueue<QElemType>::LinkQueue()
{
	front = rear = new(nothrow)QNode<QElemType>;
	if (!front)
		exit(LOVERFLOW);
	front->next = nullptr;
}

template<class QElemType>
LinkQueue<QElemType>::~LinkQueue()
{
	while (front) {
		rear = front->next;
		delete front;
		front = rear;
	}
}

template<class QElemType>
Status LinkQueue<QElemType>::EnQueue(QElemType e)
{
	QNode<QElemType> *p = new(nothrow)QNode<QElemType>;
	if (!p)
		return LOVERFLOW;
	p->data = e;
	p->next = nullptr;
	rear->next = p;
	rear = p;
	return OK;
}

template<class QElemType>
Status LinkQueue<QElemType>::DeQueue(QElemType &e)
{
	QNode<QElemType> *p;
	if (front == rear)
		return ERROR;
	p = front->next;
	e = p->data;
	front->next = p->next;
	if (rear == p)
		rear = front;
	delete p;
	return OK;
}

template<class QElemType>
void LinkQueue<QElemType>::PrintQueue()
{
	QNode<QElemType> *p = front->next;
	while (p) {
		cout << p->data << ' ';
		p = p->next;
	}
	cout << endl;
}

template<class QElemType>
int LinkQueue<QElemType>::QueueLength()
{
	int i = 0;
	QNode<QElemType> *p = front->next;
	while (p) {
		i++;
		p = p->next;
	}
	return i;
}

template<class QElemType>
Status LinkQueue<QElemType>::QueueEmpty()
{
	if (front == rear)
		return TRUE;
	return FALSE;
}

然而,C++自带的STL队列容器,在代码量上有很大的优势,只要在代码开头加上

#include <queue>

便可以很方便的使用如下功能:

queue<int> q;
q.empty();    //当队列空时,返回true
q.pop();    //弹出队列第一个元素,注意!并不会返回被弹出元素的值
q.push(x);    //将x接到队列的末尾
q.front();    //访问队首元素
q.back();    //访问队尾元素
q.size();    //访问队列中元素个数

因为队列容器不允许对q进行直接操作,那么应该如何进行队列的遍历输出呢? 我昨天在完成数据结构哈希表的过程中,就遇到了这样一个问题,后来发现只要先进行front操作,再把第一个元素pop,同时判断队列是否为empty,就能够实现这样的功能了。具体的实现方式如下:

while (!q.empty()) {
		cout << q.front() << " ";
		q.pop();
	}

 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值