0x55AA 发表于 2014-12-8 18:01:21

【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]
查看完整版本: 【C++】C++模板实现的单向队列