下面代碼僅供本人複習資料結構所用,實用性N低,各位飄過吧~~哈哈:>
// // C++ 模版技術實現簡單鏈式隊列樣本. // #include <cstdlib>#include <iostream>#include <iomanip>#include <stdexcept>// 鏈式隊列類模版前置聲明. template <typename T> class LinkedQueue;//// 鏈式隊列節點類模版. //template <typename T>class Node{friend class LinkedQueue<T>;private:T _value;Node<T> *_pNext;public:Node(void): _pNext(NULL){ NULL; }Node(const T &val) : _value(val), _pNext(NULL){ NULL; }};//// 鏈式隊列類模版. // 採用帶前端節點和尾指標的單向鏈表.// 當隊列為空白是尾指標指向前端節點. // 入隊時從頭結點後接入,出隊時從尾節點斷開. // template <typename T>class LinkedQueue{private:Node<T> *_pFront, *_pRear;public:LinkedQueue(void);~LinkedQueue(void);bool isEmpty(void) const;size_t getLength(void) const;T getFront(void) const;void enqueue(const T &val);T dequeue(void);};template <typename T>inline LinkedQueue<T>::LinkedQueue(void){ _pFront = new Node<T>();_pRear = _pFront;}template <typename T>LinkedQueue<T>::~LinkedQueue(void){for (Node<T> *pDel = _pFront->_pNext; NULL != pDel; pDel = _pFront->_pNext){_pFront->_pNext = pDel->_pNext;#if !defined(NDEBUG)std::cout << "刪除節點:" << pDel->_value << std::endl; #endifdelete pDel;}delete _pFront;}template <typename T>inline bool LinkedQueue<T>::isEmpty(void) const{return _pFront == _pRear;}template <typename T>size_t LinkedQueue<T>::getLength(void) const{size_t len = 0;for (Node<T> *pTemp = _pFront->_pNext; NULL != pTemp; ++len){ pTemp = pTemp->_pNext; }return len;}template <typename T>inline T LinkedQueue<T>::getFront(void) const{return _pFront->_pNext->_value;}template <typename T>inline void LinkedQueue<T>::enqueue(const T &val){Node<T>* pNew = new Node<T>(val);_pRear->_pNext = pNew;_pRear = pNew;}template <typename T>inline T LinkedQueue<T>::dequeue(void){if (isEmpty()) {throw std::underflow_error("隊空下溢 !");}Node<T> *pDel = _pFront->_pNext;_pFront->_pNext = pDel->_pNext;T value = pDel->_value;delete pDel;if (NULL == _pFront->_pNext){_pRear = _pFront;}return value;}//// 隊列測試 //int main(void){LinkedQueue<int> queue;const size_t QUEUE_SIZE = 20;for (size_t i = 0; i < QUEUE_SIZE; ++i){queue.enqueue(i);}std::cout << std::endl << "隊列" << (queue.isEmpty() ? "" : "不") << "為空白." << std::endl;for (size_t i = 0; i < QUEUE_SIZE; ++i){std::cout << std::setw(3) << queue.dequeue();}// std::cout << std::setw(3) << queue.dequeue();std::cout << std::endl << "隊列" << (queue.isEmpty() ? "" : "不") << "為空白." << std::endl;return EXIT_SUCCESS;}