单链队列,队列的链式存储结构C++实现


单链队列,队列的链式存储结构C++实现

//mList.cpp
/*
	使用链式结构实现队列操作
	@author:天下无双
	@date:2014-5-28
	@version:2.0
*/
#include <iostream>
using namespace std;
template<class T>
class Queue
{
private:
	static const int MAX=100 ;//队列的最大长度
	//队列节点
	struct QNode{
	T data;//节点值
	QNode *next;
	};
	QNode *front;//队列头指针
	QNode *rear;//队列尾指针
	int count;//队列长度
public:
	//创建空队列
	Queue(){
		front=rear=nullptr;
		count=0;
	}
	~Queue(){
		QNode *temp=front;
		QNode *p=temp;
		cout<<endl;
		while(temp!=nullptr){
			temp=temp->next;
			cout<<"delete "<<p->data<<endl;
			delete p;
			p=temp;		
		}
	}
	//插入元素
	bool EnQueue(T &t){
		QNode *p=new QNode;
		p->data=t;
		p->next=nullptr;
		if(nullptr==front){//如果是一个空队列
			front=rear=p;
			count++;
			front->next=nullptr;
			return true;
		}else if(!isFull()){//判断队列是否已满
		rear->next=p;
		rear=p;//重新指定尾指针,rear=p
		//rear->next=nullptr;//重新指定尾指针,rear=p->next=nullptr;
		count++;
		return true;
		}else
			return false;
			
	}
	//删除队列头
	bool DeleteQueue(){
		if(isEmpty()){//判断是否为空队列
			cout<<"Queue is Empty!Can't delte it!"<<endl;
			return false;
		}
		QNode *temp=front;
		front=front->next;
		delete temp;
		count--;
		return true;

	}
	int Length()const{
		return count;
	}
	void show()const{
		QNode *temp=front;
		while(temp!=nullptr){
			cout<<temp->data<<" ";
			temp=temp->next;
		}
	}
protected:
	bool isEmpty()const{
		return count==0;
	}
	bool isFull()const{
		if(count==MAX){
			cout<<"Queue full!"<<endl;
			return true;
		}
		return false;
	}




};
测试代码:
<pre name="code" class="cpp">int main()
{
	{
	Queue<int> q;
	for(int i=1;i<103;i++)
		q.EnQueue(i);
	cout<<endl;
	q.show();
	cout<<endl;
	for(int j=0;j<102;j++)
	  q.DeleteQueue();
	}
	system("pause");
	return 0;
}


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注