Queue
2013-11-06 09:57
176 查看
#include <cstdlib> #include <iostream> using namespace std; template <class T> class Queue { public: // 队列的运算集 void clear(); // 变为空队列 bool enQueue(const T item); // item入队,插入队尾,成功则返回真否则返回假 bool deQueue(T item); // 返回队头元素并从队列中删除,成功则返回真 bool front(T* item); // 返回队头元素,但不删除,成功则返回真 bool isEmpty(); // 返回真,若队列已空 bool isFull(); // 返回真,若队列已满 void print(); }; template <class T> class Link { public: T data; // 用于保存结点元素的内容 Link * next; // 指向后继结点的指针 Link(const T info, Link* nextValue = NULL) { // 具有两个参数的Link构造函数 data = info; next = nextValue; } Link(Link* nextValue = NULL) { // 具有一个参数的Link构造函数 next = nextValue; } }; template <class T> class lnkQueue: public Queue <T> { private: int size; // 队列中当前元素的个数 Link<T>* front; // 表示队头的指针 Link<T>* rear; // 表示队尾的指针 public: // 队列的运算集 lnkQueue(int size) { // 创建队列的实例 size = 0; front = rear = NULL; } ~lnkQueue() { // 消除该实例,并释放其空间 clear(); } void clear() { // 清空队列 while (front != NULL) { rear = front; front = front->next; delete rear; } rear = NULL; size = 0; } bool enQueue(const T item) { // item入队,插入队尾 if (rear == NULL) { // 空队列 front = rear = new Link<T> (item, NULL); } else { // 添加新的元素 rear-> next = new Link<T> (item, NULL); rear = rear ->next; } size++; return true; } bool deQueue(T* item) { // 返回队头元素并从队列中删除 Link<T> *tmp; if (size == 0) { // 队列为空,没有元素可出队 cout << "队列为空" << endl; return false; } *item = front->data; tmp = front; front = front -> next; delete tmp; if (front == NULL) rear = NULL; size--; return true; } bool getFront(T* item) { // 返回队头元素,但不删除 if (size == 0) { // 队列为空,没有元素可出队 cout << "队列为空" << endl; return false; } *item = front->data; return true; } void print() { // 返回队头元素,但不删除 if (front == NULL) { cout << "队列为空" << endl; } Link<T>*p = front; while(p != NULL) { cout << p->data << " "; p = p->next; } cout << endl; } }; int main(int argc, char *argv[]) { lnkQueue<int> *tst = new lnkQueue<int>(0); int n; cin >> n; for (int i=0; i<n;i++) tst->enQueue(i); tst->print(); cin >> n; tst->deQueue(&n); cout << "the deleted front is:" << n << endl; cin >>n; tst->getFront(&n); cout << "the front is:" << n << endl; cin >> n; }
相关文章推荐
- 540 - Team Queue***
- 标准模板库(STL)之 priority_queue 列传
- The FastCGI pool queue is full 的错误 解决
- leetcode 232. Implement Queue using Stacks-栈模拟队列
- java.util.concurrent.LinkedBlockingQueue
- Android中关于Volley的使用(五)从RequestQueue开始来深入认识Volley
- Handler+Looper+MessageQueue深入详解案例
- Leetcode题解 232. Implement Queue using Stacks
- [iOS]使用Audio Queue Services 播放和录制音频
- 算法Sedgewick第四版-第1章基础-011一用链表实现bag、queue、stack
- dispatch_async 与 dispatch_get_global_queue (多线程)
- 队列Queue
- kqueue epoll 边界触发模式的网络编程模型
- 队列(Queue)
- STL源码剖析学习七:stack和queue
- FMDB-FMDatabaseQueue
- 泛型类:Queue
- ConcurrentLinkedQueue的实现原理分析
- Multi-Queue Replacement Algorithm
- uva 1594 Ducci Sequence <queue,map>