数据结构——循环队列(c++)

myQueue.h

//myQueue.h
template <class T>  
class Queue  {  
public:                             // 队列的运算集 
    void clear();                   // 变为空队列 
    bool enQueue(const T& item);    // item入队,插入队尾,成功则返回真否则返回假 
    bool deQueue(T& item);          // 返回队头元素并从队列中删除,成功则返回真 
    bool front(T& item);            // 返回队头元素,但不删除,成功则返回真 
    bool isEmpty();                 // 返回真,若队列已空 
    bool isFull();                  // 返回真,若队列已满 
} ;


arrQueue.h

//arrQueue.h
#include <cstdlib> 
#include <iostream> 

#include "myQueue.h" 

using namespace std; 

template <class T>  
class arrQueue: public Queue<T> {  
private:     
    int     mSize;                          // 存放队列的数组的大小 
    int     front;                          // 表示队头所在位置的下标 
    int     rear;                           // 表示队尾所在位置的下标 
    T       *qu;                            // 存放类型为T的队列元素的数组 
public:                                     // 队列的运算集 
    arrQueue(int size)  {                   // 创建队列的实例 
        mSize = size +1;                    // 浪费一个存储空间,以区别队列空和队列满 
        qu = new T[mSize]; 
        front = rear = 0; 
    } 
    ~arrQueue()  {                         // 消除该实例,并释放其空间 
        delete [] qu; 
    } 
    void clear() {                          // 清空队列 
        front = rear;  
    }       
    void print() {                          // 输出队列 
        if (front == rear)  { 
            cout << "队列为空" << endl; 
        } 
        int p = front; 
        while(p != rear ) { 
              cout << qu[p] << " "; 
              p =( p + 1)  % mSize;   
        }  
        cout << endl; 
    } 
    bool enQueue(const T item);             // item入队,插入队尾。注意:队满。item亦可为引用
    bool deQueue(T*item);                   // 返回队头元素并从队列中删除。注意:队空。item亦可为引用    
    bool getFront(T* item);                 // 返回队头元素,但不删除注意:队空。item亦可为引用 
}; 



template<class T>
bool arrQueue<T>::enQueue(const T item)
{
    if(((rear+1)%mSize)==front)
    {
        cout<<"队列已满,溢出"<<endl;
        return false;
    }
    qu[rear]=item;
    rear=(rear+1)%mSize;
    return true;
}


template<class T>
bool arrQueue<T>::deQueue(T * item)
{
    if(front==rear)
    {
        cout<<"队列为空"<<endl;
        return false;
    }
    *item=qu[front];    
    front=(front+1)%mSize;
    return true;
}


template<class T>
bool arrQueue<T>::getFront(T * item)
{
    if(front==rear)
    {
        cout<<"队列为空"<<endl;
        return false;
    }
    *item=qu[front];
    return true;
}

main.cpp

//main.cpp

#include <cstdlib> 
#include <iostream> 

#include "arrQueue.h" 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    arrQueue<int> Qu(6);
    for(int i=1;i<=4;i++)
    {
        Qu.enQueue(i);
    }
    cout<<"输出元素:";
    Qu.print();
    cout<<"入队操作:"<<endl;
    Qu.enQueue(14);
    cout<<"输出元素:";
    Qu.print();
    cout<<"出队操作:"<<endl;
    int del;
    Qu.deQueue(&del);
    cout<<"出队元素为:"<<del<<endl;
    cout<<"输出元素:";
    Qu.print();
} 



这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值