c++模板实现的队列
2005-08-27 19:20
537 查看
/************************************************************************/ /* 队列节点类 */ /************************************************************************/ template <class T> class LinkedNode { public: LinkedNode<T> *next;//指向下一个节点的指针 T data;//数据域 LinkedNode(const T& data, LinkedNode<T> *next); LinkedNode(const T& data); LinkedNode(); //使用默认的析构函数 }; /************************************************************************/ /*前提条件:类T必须有无参数的构造函数 */ /************************************************************************/ template <class T> LinkedNode<T>::LinkedNode():next(0) { } template <class T> LinkedNode<T>::LinkedNode(const T& data):next(0), data(data) { } template <class T> LinkedNode<T>::LinkedNode(const T& data, LinkedNode<T> *next):data(data), next(next) { } /************************************************************************/ /* 对列类 */ /************************************************************************/ template <class T> class Queue{ public: LinkedNode<T> *head; LinkedNode<T> *tail; Queue(); ~Queue(); bool EnQueue(const T& data); bool DeQueue(T& data); int GetLength() const; bool IsEmpty() const; }; template <class T> Queue<T>::Queue() { head = new LinkedNode<T>(); tail = head; } template <class T> Queue<T>::~Queue() { LinkedNode<T>* first = 0; while(head) { first = head; head = head->next; delete first; } } /************************************************************************/ /*入队 */ /************************************************************************/ template <class T> bool Queue<T>::EnQueue(const T& data) { LinkedNode<T> *element = new LinkedNode<T>(data); if(!element) return false; this->tail->next = element; this->tail = element; return true; } /************************************************************************/ /* 出对 */ /************************************************************************/ template <class T> bool Queue<T>::DeQueue(T& data) { if(!head->next) { return false; } //对列只有一个元素 if(head->next == tail) { tail = head; } data = head->next->data; LinkedNode<T>* temp; temp = head->next; head->next = head->next->next; delete temp; return true; } /************************************************************************/ /* 获取对列长度 */ /************************************************************************/ template <class T> Queue<T>::GetLength() const { int size = 0; LinkedNode<T>* first = head->next; while(first) { size++; first = first->next; } return size; } /************************************************************************/ /* 判断队列是否为空 */ /************************************************************************/ template <class T> bool Queue<T>::IsEmpty() const { return (head == tail) ? true : false; } |
相关文章推荐
- 用两个栈实现队列(C++模板)
- 数据结构图文解析之:队列详解与C++模板实现
- C++模板实现的单向队列
- 数据结构(6) 顺序队列 c++ 模板实现
- C++模板实现的队列多线程安全
- C++模板实现泛型队列
- 用C++队列模板实现杨辉三角的输出
- 优先级队列——用C++模板实现
- C++模板实现链式队列
- 队列(链式存储)C++模板实现
- 用两个队列实现栈(C++模板)
- C++ 模板应用 实现一个Queue 队列
- 数据结构图文解析之:队列详解与C++模板实现
- C++模板实现优先级队列
- C++模板实现队列
- 数据结构(7) 链队列 c++ 模板实现
- 队列详解与C++模板实现
- 队列(queue) 之 c++模板实现(友元函数和运算符重载)
- C++模板链表实现优先级队列
- C++模板实现顺序队列