[C++]链队的实现

时间:2019-01-10
本文章向大家介绍[C++]链队的实现,主要包括[C++]链队的实现使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
template <typename ElemType>
class Queue {
	public:
		Queue() {
			FrontPointer = RearPointer = new QueueNode; //加入头结点以便于操作 
			FrontPointer->next = NULL; //头结点指针域初始化为NULL 
		}
		void push(const ElemType Val) { //元素入队
			QueueNode *p = new QueueNode; p->data = Val; p->next = NULL;
			RearPointer->next = p; RearPointer = p;		
		}
		void pop() { //元素出队
			if (FrontPointer == RearPointer) exit(-1);
			QueueNode *p = FrontPointer->next;
			FrontPointer->next = p->next;
			if (RearPointer == p) RearPointer = FrontPointer;
			delete p;
		}
		ElemType &front() { //返回头部元素
			if (FrontPointer == RearPointer) exit(-1);
			return FrontPointer->next->data;	
		}
		const ElemType &front() const {
			if (FrontPointer == RearPointer) exit(-1);
			return FrontPointer->next->data;
		}
		ElemType &back() { //返回尾部元素
			if (FrontPointer == RearPointer) exit(-1);
			return RearPointer->data;
		}
		const ElemType &back() const {
			if (FrontPointer == RearPointer) exit(-1);
			return RearPointer->data;
		}
		int size() { //返回链队中的元素个数
			QueueNode *p = FrontPointer; int count = 0;
			while (p->next != NULL) {
				p = p->next; ++count;
			}
			return count;
		}
		bool empty() { //判断链队是否为空
			return (FrontPointer == RearPointer) ? true : false;
		}
		void clear() { //销毁链队
			while (FrontPointer != NULL) {
				RearPointer = FrontPointer->next; 
				delete FrontPointer; 
				FrontPointer = RearPointer;
			}
		}
	private:
		struct QueueNode {
			typedef QueueNode *QueueNodePointer;
						
			ElemType data;
			QueueNodePointer next;
		};
		QueueNode *FrontPointer, *RearPointer; //头指针与尾指针
};