zoukankan      html  css  js  c++  java
  • 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> &copy);
     21     SqQueue<ElemType> &operator =(const SqQueue<ElemType> &copy);
     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> &copy)
     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 //重载=operator
    107 SqQueue<ElemType> &SqQueue<ElemType>::operator=(const SqQueue<ElemType> &copy)
    108 {
    109     if(&copy!=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 }

  • 相关阅读:
    nexus搭建maven私服
    eclipse 使用git
    多启动引导工具_YUMI – Multiboot USB Creator
    减压Zip与创建Zip文档
    将设置集成到右键联级菜单
    在Windows 10上清除和管理TPM (受信任的平台模块)
    删除Windows运行记录
    计算文本HasH
    在右键新建中添加"Windows PowerShell脚本"
    调整Windows 10字号
  • 原文地址:https://www.cnblogs.com/ljwTiey/p/4268139.html
Copyright © 2011-2022 走看看