⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queue.h

📁 我自己写的vc数据结构的作业
💻 H
字号:
#ifndef QUEUE_H
#define QUEUE_H

template <class T>
class QueueItem 
{
public:
	QueueItem(const T &t): item(t), next(0) { }
	T item;           
	QueueItem *next;     
};

template <class T>
class Queue 
{
public:
	Queue(): head(0), tail(0) { }
	Queue(const Queue &Q): head(0), tail(0) { copy(Q); }
	Queue& operator=(const Queue&);
	~Queue() { destroy(); }

	T& front() { return head->item; }
	const T &front() const { return head->item; }
	void push(const T &);      
	void pop ();              
	bool empty () const { return head == 0; }

private:
	QueueItem<T> *head;        
	QueueItem<T> *tail;  
	void destroy();              
	void copy(const Queue&);
};


template <class T>
void Queue<T>::destroy()
{
    while (!empty())
        pop();
}

template <class T>
void Queue<T>::pop()
{
    QueueItem<T>* p = head;
    head = head->next;        
    delete p;  
}

template <class T>
void Queue<T>::push(const T &val)
{
    QueueItem<T> *pt = new QueueItem<T>(val);
    if (empty())
        head = tail = pt;
    else 
	{
        tail->next = pt;
        tail = pt;
    }
}

template <class T>
void Queue<T>::copy(const Queue<T> &orig)
{
    for (QueueItem<T> *pt = orig.head; pt; pt = pt->next)
        push(pt->item); 
}

template <class T>
Queue<T>& Queue<T>::operator=(const Queue<T>& orig)
{
       if ( this != &orig ) {
            destroy();
            copy(orig);
       }
       
       return *this;              
}

#endif//QUENE.H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -