首页 > 代码库 > SqQueue(环状队列(顺序表结构))
SqQueue(环状队列(顺序表结构))
1 template<typename ElemType> 2 class SqQueue 3 { 4 protected: 5 int count; 6 int front,rear; 7 int maxSize; 8 ElemType *elem; 9 public: 10 SqQueue(){} 11 SqQueue(int size); 12 virtual ~SqQueue(); 13 int Length() const; 14 bool Empty() const; 15 void Clear(); 16 void Traverse(void (*visit)(const ElemType &))const; 17 bool OutQueue(ElemType &e); 18 bool GetHead(ElemType &e) const; 19 bool InQueue(const ElemType &e); 20 SqQueue(const SqQueue<ElemType> ©); 21 SqQueue<ElemType> &operator =(const SqQueue<ElemType> ©); 22 }; 23 template<typename ElemType> 24 //构造函数 25 SqQueue<ElemType>::SqQueue(int size) 26 { 27 maxSize=size; 28 elem=new ElemType[maxSize]; 29 rear=front=0; 30 count=0; 31 } 32 template<typename ElemType> 33 //虚虚构函数 34 SqQueue<ElemType>::~SqQueue() 35 { 36 delete []elem; 37 } 38 template<typename ElemType> 39 //SqQueue长度 40 int SqQueue<ElemType>::Length() const 41 { 42 return count; 43 } 44 template<typename ElemType> 45 //判断空队列 46 bool SqQueue<ElemType>::Empty() const 47 { 48 return count==0; 49 } 50 template<typename ElemType> 51 //清空队列 52 void SqQueue<ElemType>:: Clear() 53 { 54 rear=front=0; 55 count=0; 56 } 57 template<typename ElemType> 58 //遍历队列 59 void SqQueue<ElemType>::Traverse(void(*visit)(const ElemType & ))const 60 { 61 for(int pos=front;pos!=rear;pos=(pos+1)%maxSize) 62 (*visit)(elem[pos]); 63 64 } 65 template<typename ElemType> 66 //队首出 67 bool SqQueue<ElemType>::OutQueue(ElemType &e) 68 { 69 if(!Empty()) 70 { 71 e=elem[front]; 72 front=(front+1)%maxSize; 73 count--; 74 return true; 75 } 76 else return false; 77 } 78 template<typename ElemType> 79 //加入新队尾 80 bool SqQueue<ElemType>::InQueue(const ElemType &e) 81 { 82 if(count==maxSize) 83 return false; 84 else 85 { 86 elem[rear]=e; 87 rear=(rear+1)%maxSize; 88 count++; 89 return true; 90 } 91 92 } 93 template<typename ElemType> 94 //复制构造 95 SqQueue<ElemType>::SqQueue(const SqQueue<ElemType> ©) 96 { 97 maxSize=copy.maxSize; 98 elem=new ElemType[maxSize]; 99 front=copy.front;100 rear=copy.rear;101 count=copy.count;102 for(int pos=front;pos!=rear;pos=(pos+1)%maxSize)103 elem[pos]=copy.elem[pos];104 }105 template<typename ElemType>106 //重载=operator107 SqQueue<ElemType> &SqQueue<ElemType>::operator=(const SqQueue<ElemType> ©)108 {109 if(©!=this)110 {111 maxSize=copy.maxSize;112 delete []elem;113 elem=new SqQueue<ElemType>[maxSize];114 count=copy.count;115 front=copy.front;116 rear=copy.rear;117 for(int pos=front;pos!=rear;pos=(pos+1)%maxSize)118 elem[pos]=copy.elem[pos];119 return *this;120 }121 122 }
SqQueue(环状队列(顺序表结构))
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。