【C++】C++模板实现的单向队列
C++模板实现的单向队列的元素添加,元素删除,元素清除功能Queues.h//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();
intgetLength();
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;
}
#endifmain.cpp// 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;
}程序的运行结果:
页:
[1]