首页 > 编程语言 > 详细

C++模板实现的单向队列

时间:2014-02-28 12:47:03      阅读:485      评论:0      收藏:0      [点我收藏+]

C++模板实现的单向队列的元素添加,元素删除,元素清除功能

//Queues.h

#ifndef DDXX_QUEUES_H
#define DDXX_QUEUES_H
#include <iostream>
using namespace std;

template<typename Type>
class Queues
{
public:
	Queues();
	~Queues();
public:
	struct Node
	{
		Type	e;
		Node*	next;
		
		Node()
		{
		}
		Node(Type _e)
		{
			e		= _e;
			next	= NULL;
		}
	};
public:
	bool add(Type e);
	bool erase();
	bool isEmpty();
	int  getLength();
	void print();
	void clear();
private:
	int		m_Length;
	Node*	m_head;
	Node*	m_end;
};

template<typename Type> Queues<Type>::Queues()
{
	m_head = new Node;
	m_end = m_head;
	m_head->next = NULL;
	m_Length = 0;
}

// here change Type to Types has no influence to "add" function
template<typename Types> bool Queues<Types>::add(Types e)
{
	Node* ptr = new Node(e);
	if( ptr == NULL )
	{
		cout<<"Allocate memory for new element failed"<<endl;
		return false;
	}
	m_end->next = ptr;
	m_end = ptr;

	m_Length++;
	return true;
}

template<typename Type> bool Queues<Type>::erase()
{
	if ( m_head->next == NULL )
	{
		cout<<"The queue is empty"<<endl;
		return false;
	}
	Node* ptr = m_head->next;
	m_head->next = ptr->next;
	delete ptr;
	ptr = NULL;

	m_Length--;
	return true;
}

template<typename Types> bool Queues<Types>::isEmpty()
{
	return m_head == m_end;
}
template<typename Type> int Queues<Type>::getLength()
{
	return m_Length;
}

template<typename Type> void Queues<Type>::print()
{
	Node* ptr = m_head;
	while(ptr->next != NULL)
	{
		ptr = ptr->next;
		cout<<"element value:"<<ptr->e<<endl;
	}
}

template<typename Type> void Queues<Type>::clear()
{
	Node* ptr = m_head->next;
	while(ptr != NULL)
	{
		ptr = ptr->next;
		delete m_head->next;
		m_head->next = ptr;
		m_Length--;
	}
	m_end = m_head;
}

template<typename Type> Queues<Type>::~Queues()
{
	Node* ptr = m_head->next;
	while(ptr != NULL)
	{
		ptr = ptr->next;
		delete m_head->next;
		m_head->next = ptr;
		m_Length--;
	}
	m_end = m_head;
	delete m_head;
	m_head = NULL;
	m_end = NULL;
}
#endif

// main.cpp

#include <iostream>
#include "Queues.h"
using namespace std;

void main()
{
	cout<<"*****************************test queue init***************************"<<endl;
	Queues<int> Que;
	cout<<"Queues is empty? :"<<Que.isEmpty()<<endl;
	cout<<"Que‘s length is:"<<Que.getLength()<<endl;

	cout<<"*****************************test queue add****************************"<<endl;
	Que.add(1);
	Que.add(2);
	Que.add(3);
	Que.add(4);
	Que.print();
	cout<<"Queues is empty? :"<<Que.isEmpty()<<endl;
	cout<<"Que‘s length is:"<<Que.getLength()<<endl;

	cout<<"*****************************test queue erase**************************"<<endl;
	Que.erase();
	Que.erase();
	Que.print();
	cout<<"Queues is empty? :"<<Que.isEmpty()<<endl;
	cout<<"Que‘s length is:"<<Que.getLength()<<endl;

	cout<<"*****************************test queue clear**************************"<<endl;
	Que.clear();
	Que.print();
	cout<<"Queues is empty? :"<<Que.isEmpty()<<endl;
	cout<<"Que‘s length is:"<<Que.getLength()<<endl;
}
程序的运行结果:

bubuko.com,布布扣



C++模板实现的单向队列,布布扣,bubuko.com

C++模板实现的单向队列

原文:http://blog.csdn.net/ddupd/article/details/20043385

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!