[C++]链队的实现

template <typename value_type>
class Queue { //the queue is a FIFO container.
	struct QueueNode {
		typedef QueueNode *QueueNodePointer; //the pointer of a queue node.
		value_type data; //the data domain of the queue.
		QueueNodePointer next; //the pointer domain of the queue.
	} *FrontPointer, *RearPointer; //the front pointer and the rear pointer.
	public:
		Queue() { //initialize the queue
			FrontPointer = RearPointer = new QueueNode; //both front pointer and rear pointer point the new node.
			FrontPointer->next = NULL; //the pointer domain is NULL initially.
		}
		void push(const value_type &Val) { //push an element into the queue.
			QueueNode *p = new QueueNode; p->data = Val; p->next = NULL;
			RearPointer->next = p; RearPointer = p;	
		}
		void pop() { //pop the front element out.
			if (FrontPointer == RearPointer) exit(-1);
			QueueNode *p = FrontPointer->next;
			FrontPointer->next = p->next;
			if (RearPointer == p) RearPointer = FrontPointer;
			delete p;
		}
		value_type &front() { //return the reference of the front element.
			if (FrontPointer == RearPointer) exit(-1);
			return FrontPointer->next->data;
		}
		const value_type &front() const { //return the const reference of the front element.
			if (FrontPointer == RearPointer) exit(-1);
			return FrontPointer->next->data;
		}
		value_type &back() { //return the reference of the rear element.
			if (FrontPointer == RearPointer) exit(-1);
			return RearPointer->data;
		}
		const value_type &back() const { //return the const reference of the rear element.
			if (FrontPointer == RearPointer) exit(-1);
			return RearPointer->data;
		}
		bool empty() const { //return the situation of the queue[empty or not].
			return (FrontPointer == RearPointer) ? true : false;
		}
		int size() const { //return the size of the queue.
			QueueNode *p = FrontPointer; int count = 0;
			while (p->next != NULL) {
				p = p->next; ++count;
			}
			return count;
		}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值