1. 程式人生 > >基本資料結構:佇列(queue)

基本資料結構:佇列(queue)

template<class T>
class queueNode
{
    public:
    queueNode():next(NULL){}
    T data;//    queueNode* next;//指向下一個節點的指標};
template<class T>
class myqueue
{
    private:
    unsigned int queuelength;
    queueNode<T>* node;//臨時節點    queueNode<T>* rear;//隊尾    queueNode<T>* front;//隊首    public:
        myqueue();//
初始化        unsigned int length();//佇列元素的個數        void push(T x);//入隊        bool isEmpty();//判斷佇列是否為空        void pop();//出隊        T getHead();//獲得隊首元素 
};
template<class T>
myqueue<T>::myqueue()
{
    node=NULL;
    rear=NULL;
    front=NULL;
    queuelength=0;
}
template<class T>
inline unsigned int
 myqueue<T>::length(){return queuelength;}
 
template<class T>
void  myqueue<T>::push(T x)
{
    node=new queueNode<T>();//申請一個新的節點    node->data=x;//新節點賦值為x    if(rear==NULL)//如果沒有尾節點則佇列為空,node既為隊首,又是隊尾    {
        front=node;
        rear=node;
    }
    else//如果佇列非空    {
        rear->next=node;//
node既為尾節點的下一個節點        rear=node;//node變成了尾節點,把尾節點賦值為node    }
    ++queuelength;//元素個數+1}
template<class T>
bool  myqueue<T>::isEmpty()
{
    return queuelength==0;
}
template<class T>
void  myqueue<T>::pop()
{
    if(queuelength==0) return;
    node=front;
    front=front->next;
    delete(node);
    --queuelength;
}
template<class T>
T  myqueue<T>::getHead()
{
    return front->data;
}