佇列(連結串列實現)
阿新 • • 發佈:2018-12-21
外接線性表(連結串列實現)
#pragma once #include "chain.h" template<class T> class queue { public: virtual ~queue() {} virtual bool empty() const = 0; virtual int size() const = 0; virtual T &front() = 0; virtual T &back() = 0; virtual void pop() = 0; virtual void push(const T &theElement) = 0; }; template<class T> class LinkedQueue : public queue<T> { public: LinkedQueue(); ~LinkedQueue(); bool empty() const { return queueSize == 0; } int size() const { return queueSize; } T &front(); T &back(); void push(const T &theElement); void pop(); private: chainNode<T> *queueFront; chainNode<T> *queueBack; int queueSize; }; template<class T> LinkedQueue<T>::LinkedQueue() { queueFront = NULL; queueSize = 0; } template<class T> LinkedQueue<T>::~LinkedQueue() { while (queueFront) { chainNode<T> *nextNode = queueFront->next; delete queueFront; queueFront = nextNode; } } template<class T> T &LinkedQueue<T>::front() { if (queueSize == 0) throw "error"; return queueFront->element; } template<class T> T &LinkedQueue<T>::back() { if (queueSize == 0) throw "error"; return queueBack->element; } template<class T> void LinkedQueue<T>::push(const T &theElement) { chainNode<T> *newNode = new chainNode<T>(theElement, NULL); if (queueSize != 0) queueBack->next = newNode; else queueFront = newNode; queueBack = newNode; queueSize++; } template<class T> void LinkedQueue<T>::pop() { if (queueFront == NULL) throw "empty"; chainNode<T> *nextNode = queueFront->next; delete queueFront; queueFront = nextNode; queueSize--; }