链队列
2016-01-15 16:43
141 查看
采用一个不带头结点,只有一个尾结点指针rear的循环单链表存储队列,设计出这种队列的进队,出队,判断队空和求队中元素个数的算法
#ifndef __LINKQUEUE_H_ #define __LINKQUEUE_H_ #include <iostream> using namespace std; template<class T> struct LinkNode { T data; LinkNode *next; }; // template<class T> class LinkQueueClass { public: LinkQueueClass(); ~LinkQueueClass(); bool QueueEmpty(); bool enQueue(T e); bool deQueue(T &e); int GetCount(); private: LinkNode<T> *rear; }; // template<class T> LinkQueueClass<T>::LinkQueueClass() { rear = NULL; } // template<class T> LinkQueueClass<T>::~LinkQueueClass() { LinkNode<T> *pre,*p; pre = rear; p = pre->next; if(rear == NULL) //空队列直接返回 return ; while(p != rear) { delete pre; pre = p; p = p->next; } delete pre; } // template<class T> bool LinkQueueClass<T>::QueueEmpty() { if(rear == NULL) return true; else return false; } // template<class T> bool LinkQueueClass<T>::enQueue(T e) { LinkNode<T> *pre,*p; p = new LinkNode<T>; p->data = e; if(rear == NULL) //原链队为空 { rear = p; p->next = p; //构成循环队列 } else { p->next = rear->next; rear->next = p; rear = p; } } // template<class T> bool LinkQueueClass<T>::deQueue(T &e) { LinkNode<T> *pre,*p; if(rear == NULL) //空队列,返回false return false; else if(rear->next == rear) //只有一个结点 { e = rear->data; delete rear; rear = NULL; } else //有多个结点 { p = rear->next; e = p->data; rear->next = p->next; delete p; } return true; } // template<class T> int LinkQueueClass<T>::GetCount() { LinkNode<T> *p = rear; if(rear == NULL) return 0; p = rear->next; int i = 1; while(p!=rear) { ++i; p = p->next; } return i; } #endif // __LINKQUEUE_H_ #include "LinkQueue.h" int main() { LinkQueueClass<char> LQ; LQ.enQueue('a'); LQ.enQueue('b'); LQ.enQueue('c'); LQ.enQueue('d'); cout<<LQ.GetCount()<<endl; return 0; }
相关文章推荐
- Android布局控件之常用linearlayout布局
- jquery获取鼠标位置
- 设计模式(三)
- 安卓实现广告栏图片无限轮播播放效果
- Redis 集群的合纵与连横
- android NDK install and config in ubuntu
- socket通信(一)
- 设置textfeild的属性
- 整理的HTML5 CANVAS 定义、属性和方法
- open_basedir restriction in effect. File() is not within the allowed path(s)
- FreeSWITCH 1.6关于视频通话的一些测试
- android启动另一个app应用
- ViewPagerIndicator简要使用方法
- android系统自带下拉刷新控件的实现
- js判断input是否为空
- OJ 系列之删除字符串中出现次数最少的字符
- 初识《MVC》
- 我看过的
- 数据结构和抽象数据类型
- 瓦片地图黑线彻底解决