⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queue.h

📁 这是一个数据结构课程的关于一个循环队列的源代码
💻 H
字号:
/* Queue.h */

#include <iostream>
#include<vector>

using namespace std ;

const int nDefaultQueueSize = 50;

template <class T>
class Queue {
private:
   vector<T>   vqueue; //存放队列元素的指针(数组)
    int size; //队列大小(容量)
    int front; //队首位置
    int rear; //队尾位置(最后一个元素的下一位置)
    int count; //队列中元素的个数
public:
    //构造函数
	Queue(){ 
		 int initSize = nDefaultQueueSize;
		for(int i=0;i< initSize;i++)
		 vqueue.push_back(0) ;       
        front = 0;
        rear = 0;
        count = 0;
        size = initSize;
	}
//带队列大小参数的构造函数
 Queue(int initSize);

//析构函数
   ~Queue() {
        while (vqueue.capacity()!=0) 
			vqueue.pop_back();
        front = 0;
        rear = 0;
        count = 0;
        size = 0;
    }
    //判断队列是否为空
  int QEmpty() ;
    //判断队列是否已满
    int QFull() ;
    //队列长度
    int QLength() ;
    //队尾插入(追加)元素
    void enqueue(const T &item) ;
    //队首删除元素
    T dequeue(T &data);
    //读取队首元素
    T QFront(T &data) ;
    //清空队列
    void ClearQueue() ;
	//显示所有的元素
	void display() ;

};
 template<class T> Queue<T>::  Queue(int initSize) {
        if (initSize < 1)
            initSize = nDefaultQueueSize;
		for(int i=0;i< initSize;i++)
		 vqueue.push_back(0) ;       
        front = 0;
        rear = 0;
        count = 0;
        size = initSize;
    }

   
  template<class T>  //判断队列是否为空
	  int Queue<T>:: QEmpty() {
        return rear==front;
       
    }
    
    template<class T> //判断队列是否已满
		int Queue<T>::  QFull() {
        return (rear+1) % size == front;
        //return count == size;
    }
   
  template<class T>  //队列长度 
	  int Queue<T>:: QLength() {
        
        return (rear - front + size) % size;
    }
    
  template<class T>  //队尾插入(追加)元素
	  void Queue<T>:: enqueue(const T &item) {
        if (count == size-1) {
            cerr << "队列已满,无法再追加元素。"
                 << endl;
            return;
        }
        count ++;
         vqueue[rear] = item;
        rear = (rear + 1) % size; //rear始终指向最后一个元素的下一个位置
    }
    
  template<class T> //队首删除元素 
	  T Queue<T>:: dequeue(T &data) {
        if (count > 0) {
            data = vqueue[front];
            count --;
            front = (front + 1) % size; //front移向下一位置
        }
        else
            cerr << "队列已空,无法继续删除。" << endl;
        return data;
    }
    
  template<class T>  //读取队首元素
	  T Queue<T>:: QFront(T &data) {
        if (count > 0)
            data =vqueue[front];
        else 
            cerr << "队列为空,无法读取队首元素的值。" << endl;
        return data;
    }
   
  template<class T> //清空队列 
	  void Queue<T>::  ClearQueue() {
        front = 0;
        rear = 0;
        count = 0;
    }
 template<class T> //显示输出队列元素
	 void Queue<T>::display(){
	  int j=front ;
	  cout<<"循环队列的内容是:"<<endl ;
	  
	  for(int i=0;i<count; i++){
		  
		  cout<<vqueue[j] <<endl ; 
		  j=(j+1)%size ;
	  }
	  
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -