链式队列

h文件

#ifndef _Q_H
#define _Q_H

template<class Object>
class Queue
{
public:
	Queue();//构造函数
	~Queue();//析构函数

	bool isEmpty() const;//判断队列是不是空的
	const Object & getFront() const;//取数据出来,并不删除
	void enqueue(const Object & x);//入队
	Object dequeue();//出队
	void makeEmpty();//队列空
private:
	struct ListNote
		//结点,struct,也可以用class,此处用class默认是私有的,会出错
		//如果是数据结构就用struct,对象就用class
	{
		Object element;//数据
		ListNote *next;//指向下一个

		ListNote(const Object & theElement, ListNote *n = 0)
			:element(theElement), next(n){}
	};
	ListNote *front;
	ListNote *back;
};

template<class Object>//构造函数
Queue<Object>::Queue()
{
	front = back = 0;
}

template<class Object>//析构函数
Queue<Object>::~Queue()
{
	makeEmpty();
}

template<class Object>
void Queue<Object>::makeEmpty()
{

	while (!isEmpty())
		dequeue();//如果不是空的,就一直删除到空为止
	//不删除内存。就会产生内存泄漏

}

template<class Object>
bool Queue<Object>::isEmpty() const//队列是空的
{
	return front == 0;
}

template<class Object>//把队首的数据读出来
const Object & Queue<Object>::getFront() const
{
	if (isEmpty())
		throw "queue is empty";
	return front->element;
}

template<class Object>//数据放入队列
void Queue<Object>::enqueue(const Object &x)
{
	if (isEmpty())
		back = front = new ListNote(x);//只有一个节点
	else
		back = back->next = new ListNote(x);//back指向下一个
}

template<class Object>
Object Queue<Object>::dequeue()//删除队首
{
	Object frontItem = getFront();//要删除的节点

	ListNote *old = front;
	front = front -> next;//指针指向下一个

	delete old;//对应入队的new 

	return  frontItem;//数据返回
}

#endif

c文件

#include<iostream>



#include "Q.h"


using namespace std;


int main()
{
	//先进先出
	cout << "ok" << endl;

	Queue<int> myQ;
	myQ.enqueue(10);
	myQ.enqueue(20);
	myQ.enqueue(30);

	cout << myQ.getFront() << endl;
	cout << myQ.getFront() << endl;

	myQ.dequeue();//队首取出来

	cout << myQ.getFront() << endl;
	myQ.dequeue();
	cout << myQ.getFront() << endl;

	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值