队列的定义以及实现

来源:互联网 发布:欧陆天使淘宝店 编辑:程序博客网 时间:2024/05/29 10:01

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

/*数据结构:Queue (数组实现)    ----引申  ①队列  ②双端队列  ③循环队列  ④优先队列  目标实现循环双端队列功能:      clear     //清除队列      empty     //判断队列是否为空      size      //返回队列中实际数据个数      max_size  //返回容器中最大数据量      resize    //重新指定容器大小      push_front //开头插入元素      push_back  //尾部插入元素      pop_front  //头部删除元素      pop_back   //尾部删除元素      show       //显示队列所有元素/*********附加功能(未实现)**********//*      Iterator      assign      emplace      swap*/#include<iostream>#include<deque>#include<string>template <typename T>class Queue{private:    int Front,Rear;                             //队首和队尾    T *data;                                    //队列的值    std::string::size_type Size;                //队列大小public:Queue(){    Size =20;    Front=0;    Rear=0;    data = new T[Size];}~Queue(){   delete[] data;}void clear(){  Front=0;  Rear=0;  Size=0;}bool empty()const{    return (Front==Rear);}std::string::size_type size(){  return (Rear-Front+Size)%Size;}std::string::size_type max_size(){    return Size;}void resize(std::string::size_type RE){    Size=RE;    T* temp = data;    data = new T[RE];    for(auto i = 0,j=Front;i<Size||j<Rear;i++,j++)        data[i] = temp[j];    Rear = Size>Rear?size():Size;    Front = 0;    delete[]temp;}void push_front(const T& val){  if(size()!=Size)  {      data[Front] = val;      Front = (Front-1+Size)%Size;  }  else    std::cout<<"上溢"<<std::endl;}void push_back(const T& val){ if(size()!=Size)  {      data[Rear] = val;      Rear = (Rear+1)%Size;  }  else  std::cout<<"上溢"<<std::endl;}void pop_front(){  if(!empty())  {    Front = (Front+1)%Size;  }  else  {      std::cout<<"下溢"<<std::endl;  }}void pop_back(){   if(!empty())  {    Rear = (Rear-1+Size)%Size;  }  else  {      std::cout<<"下溢"<<std::endl;  }}T& top_front(){  if(!empty()) return data[Front];}T& top_back(){   if(!empty()) return data[Rear];}void show(){    for(int i = Front;i<Rear;i++)    {      std::cout<<data[i]<<" ";    }    std::cout<<std::endl;}/*void info(){    std::cout<<"目前类内情况"<<std::endl;    std::cout<<"Front:"<<Front<<"  Rear"<<Rear<<"  Size"<<Size<<std::endl;}*/};
原创粉丝点击