菜鸟学习数据结构算法之路之循环队列(顺序存储结构实现)

废话不多说,上代码
头文件

#ifndef _MYQUEUE__H
#define _MYQUEUE__H
#include <iostream>
using namespace std;

class MyQueue{
private:
    int *_myQueue;      //存放队列的数组指针
    int _head;  //队列头
    int _tail;  //队列尾
    int _size;  //队列容量
    int _len;   //队列长度
public:
    MyQueue(int size);
    ~MyQueue();
    void clearQueue();  //清空队列
    bool isEmpty() const;       //判断队列是否为空      eg:const的作用是保证这个函数里不修改任何值
    bool isFull() const;        //判断队列是否为满
    int getLength() const;      //返回队列的长度
    bool addQueue(int elem);    //队列添加元素
    bool deleteQueue(int &elem);    //队列删除元素
    void traverseQueue();       //遍历队列
};
#endif  //_MYQUEUE__H

代码实现

#include "MyQueue.h"

MyQueue::MyQueue(int size){
    _size = size;       //队列容量
    _myQueue = new int[_size];  //从堆中创建空间
    _head = 0;  //队头0
    _tail = 0;  //队尾0
    _len = 0;
}
MyQueue::~MyQueue(){   //析构函数,释放堆空间
    delete[]_myQueue;
    _myQueue = NULL;
}
void MyQueue::clearQueue(){         //清空队列
    _head = 0;  
    _tail = 0;  
    _len = 0;   
}
bool MyQueue::isEmpty() const{      //队列判空
    if (_len == 0){         //当队列为空是,条件是队头等于队尾,也就是队头跟队尾是在同一位置
        cout << "队列为空" << endl;
        return true;
    }
    return false;
}
bool MyQueue::isFull() const{       //队列判满
    if (_len == _size){     //当队列为满时,容量与长度相等
        cout << "队列已满" << endl;
        return true;
    }
    return false;
}
int MyQueue::getLength() const{     //获取队列的长度
    return _len;
}
bool MyQueue::addQueue(int elem){       //队尾增加元素
    if (isFull()){
        return false;
    }
    _myQueue[_tail] = elem;     //在数组下标为0的地方添加第一个元素
    _tail++;                    //队尾自增到数组下标为1的位置
    _tail = _tail  % _size;     /*为了确保自增后的下标不会越过容量指向错误导致出错
                                比如创建一个容量为4的队列,那么数组下标就为0,1,2,3,如果添加完四个元素后
                                继续添加,则会指向下标为4的这个位置,那么内存就会报错,添加这句代码后能确保
                                数组最后一个元素的下标的指向是正确的,下面删除也是一样*/
    _len++;
    return true;
}
bool MyQueue::deleteQueue(int &elem){
    if (isEmpty()){
        return false;
    }
    elem = _myQueue[_head];
    _head++;
    _head = _head %_size;
    _len--;
    return true;
}
void MyQueue::traverseQueue(){
    for (int k = 0; k < _len; k++){
        cout << _myQueue[k%_size] << endl;
    }
}

代码测试

#include "MyQueue.h"

int main(){
    MyQueue *p = new MyQueue(4);
    //添加元素测试
    p->addQueue(1);
    p->addQueue(2);
    p->addQueue(3);
    p->addQueue(4);

    //遍历测试
    p->traverseQueue();
    //判满测试
    p->isFull();

    //删除测试
    int e = 0;
    p->deleteQueue(e);
    cout << e << endl;

    system("pause");
    return 0;
}

OK,完工

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值