C++类模板 实现队列的链式存储结构算法 《数据结构》(北京科海) 部分代码摘抄,自己编写运行

       为了操作方便,为链队列添加一个“头结点”,并约定头指针始终指向这个附加的头结点,尾指针指向队列尾结点。读者注意“出队列”算法中的特殊情况。当队列中只有一个结点时(此时队尾指针指向该结点),出队列操作将“丢失”队尾指针。因此在这种情况下,尚需修改队尾指针,令它指向头结点。

/*
Filename: LinkQueue.h
Description: Using linked storage structure to achieve queue.
Date: November 20, 2012
*/

#ifndef LINKQUEUE_H
#define LINKQUEUE_H

#include <iostream>
using namespace std;

template<class T> class LinkQueue;

template<class T>
class QueueNode
{
	friend class LinkQueue<T>;
public:
	QueueNode()
	{
		next = NULL;
	}

	QueueNode(T item)
	{
		data = item;
		next = NULL;
	}

	~QueueNode()
	{

	}

private:
	T data;
	QueueNode<T> *next;
};


template<class T>
class LinkQueue
{
public:
	LinkQueue() //构造一个只含头结点的队列
	{
		front = rear = new QueueNode<T>;
	}

	~LinkQueue()
	{

	}

public:
	void EnQueue_L(T elem); //入队列
	bool DeQueue_L(T &return_elem); //出队列
	void DestoryQueue_L(); //销毁队列
	T GetHead();
	void Print();

private:
	QueueNode<T> *front;
	QueueNode<T> *rear;
};


template<class T>
void LinkQueue<T>::EnQueue_L(T elem) 
{
	QueueNode<T> *newNode = new QueueNode<T>(elem);
	rear->next = newNode;
	rear = newNode;
}


template<class T>
bool LinkQueue<T>::DeQueue_L(T &return_elem)
{
	if (front == rear)
	{
		return false;
	}

	QueueNode<T> *tempNode = front->next;
	return_elem = tempNode->data;
	front->next = tempNode->next;

	if (rear == tempNode)
	{
		rear = front;
	}

	delete tempNode;
	return true;

}


template<class T>
void LinkQueue<T>::DestoryQueue_L()
{
	while (front)
	{
		rear = front->next;
		delete front;
		front = rear;
	}
}


template<class T>
T LinkQueue<T>::GetHead()
{
	return front->next->data;
}


template<class T>
void LinkQueue<T>::Print()
{
	if (rear != front)
	{
		QueueNode<T> *tempNode = front->next;

		while (tempNode != rear)
		{
			cout << tempNode->data << " ";
			tempNode = tempNode->next;
		}

		cout << tempNode->data  << endl;
	}
	else
	{
		cout << "队列为空!" << endl;
	}
}

#endif



#include "LinkQueue.h"

int main()
{
	LinkQueue<int> Lq;
	Lq.EnQueue_L(1);
	Lq.EnQueue_L(3);
	Lq.EnQueue_L(5);
	Lq.EnQueue_L(7);
	Lq.Print();
	cout << "队列头元素:" << Lq.GetHead() << endl;
	cout << "------------------------" << endl;

	int data;
	cout << "出队列:" << Lq.DeQueue_L(data) << endl;
	Lq.Print();
	cout << "队列头元素:" << Lq.GetHead() << endl;
	cout << "------------------------" << endl;

	Lq.DestoryQueue_L();
	Lq.Print();
	

	system("pause");
	return 0;
}


     我也是一个刚学习数据结构算法的新手,如果发表的文章有什么错误或者更好建议的地方,请大家踊跃指出来,我表示感谢.....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值