C++链式队列

practice1.h

#ifndef PRACTICE1_H_INCLUDED
#define PRACTICE1_H_INCLUDED
#include<iostream>

template <class T>
class Queue{
public:
    Queue();//构造函数
    ~Queue();//析构函数
    bool isEmpty() const;//判断是否为空
    const T& getFront() const;//得到队首数据不删除
    void enqueue(const T& x);//进队列
    T dequeue();//删除队首数据 且得到队首数据
    void makeEmpty();//清空队列

private:

    struct ListNode//结构体嵌套 也可以用友元类
    {
        T element;//数据域
        ListNode *next;//指针域
        ListNode(const T & theElement,ListNode *n=0)//构造函数
        :element(theElement),next(n) {}

    };
    ListNode *front;//对头指针
    ListNode *back;//队尾指针
};
template<class T>
Queue<T>::Queue()
{
    front=0;
    back=0;
}
template<class T>
Queue<T>::~Queue()
{
   makeEmpty();

}
template<class T>
void Queue<T>::makeEmpty()
{
  while(!isEmpty())

    dequeue();

}
template<class T>
bool Queue<T>::isEmpty()const
{

    return front==0;
}
template <class T>
const T& Queue<T>::getFront() const
{

    if(isEmpty())
    {
        throw "queue is empty";
    }
    return  front->element;
}

template<class T>
void Queue<T> ::enqueue(const T & x)
{

    if(isEmpty())
        back=front=new ListNode(x);
    else
        back=back->next=new ListNode(x);

}

template<class T>
T  Queue<T>::dequeue()
{

    T frontItem=getFront();
    ListNode *old=front;
    front=front->next;
    delete old;
    std::cout<<frontItem<<std::endl;
}
#endif // PRACTICE1_H_INCLUDED

practice2.cpp

#ifndef PRACTICE1_H_INCLUDED
#define PRACTICE1_H_INCLUDED
#include<iostream>

template <class T>
class Queue{
public:
    Queue();//构造函数
    ~Queue();//析构函数
    bool isEmpty() const;//判断是否为空
    const T& getFront() const;//得到队首数据不删除
    void enqueue(const T& x);//进队列
    T dequeue();//删除队首数据 且得到队首数据
    void makeEmpty();//清空队列

private:

    struct ListNode//结构体嵌套 也可以用友元类
    {
        T element;//数据域
        ListNode *next;//指针域
        ListNode(const T & theElement,ListNode *n=0)//构造函数
        :element(theElement),next(n) {}

    };
    ListNode *front;//对头指针
    ListNode *back;//队尾指针
};
template<class T>
Queue<T>::Queue()
{
    front=0;
    back=0;
}
template<class T>
Queue<T>::~Queue()
{
   makeEmpty();

}
template<class T>
void Queue<T>::makeEmpty()
{
  while(!isEmpty())

    dequeue();

}
template<class T>
bool Queue<T>::isEmpty()const
{

    return front==0;
}
template <class T>
const T& Queue<T>::getFront() const
{

    if(isEmpty())
    {
        throw "queue is empty";
    }
    return  front->element;
}

template<class T>
void Queue<T> ::enqueue(const T & x)
{

    if(isEmpty())
        back=front=new ListNode(x);
    else
        back=back->next=new ListNode(x);

}

template<class T>
T  Queue<T>::dequeue()
{

    T frontItem=getFront();
    ListNode *old=front;
    front=front->next;
    delete old;
    std::cout<<frontItem<<std::endl;
}
#endif // PRACTICE1_H_INCLUDED

猜你喜欢

转载自www.cnblogs.com/libin123/p/10420138.html