C++习题——循环队列(顺序存储)

没有多少花哨的东西,也不知道自己写的到底是有多少符合现在的“编码规范”,一切都是在学习之中,望看到的前辈能够指出不足。

Cirque.h

#pragma once
#include <iostream>
const int INIT_SIZE = 10;   //队列初始容量
class Cirque{
    //演示顺序存储的循环队列,队列元素为int型
private:
    int size;   //队列容量
    int front;//头指针(顺序存储的循环队列就用数字代替了)
    int rear;//尾指针(同上)
    int* base;//队列存储区起始位置指针
 //   int length;//有length还需要用间隔一个元素搞毛,所以这是第二种判满方法:)
public:
    Cirque();   //以默认容量构造空循环队列
    Cirque(int initsize);//指定容量initsize来构造
    void Clear();   //清空队列
    int Enque(int data);   //入队
    int Deque();   //出队
    bool IsFull(); //判满
    bool IsEmpty();//判空
    ~Cirque();  //析构
};

Cirque.cpp

#include "cirqueue.h"
using std::cout;
using std::endl;
//----------------------------------------------------
Cirque::Cirque(){//默认构造函数
    base = new int[INIT_SIZE];
    if(!base){//分配不成功则退出
        exit(-1);
    }
    front = rear = 0;    //三针合一 :)
    size = INIT_SIZE;
}
//----------------------------------------------------
Cirque::Cirque(int initsize){//可指定队列初始容量initsize
    base = new int[initsize];
    if(!base){
        exit(-1);
    }
    front = rear = 0;
    size = initsize;
}
//----------------------------------------------------
void Cirque::Clear(){
    front = rear = 0;
}
//----------------------------------------------------
bool Cirque::IsEmpty(){
    if (front == rear) {
        return true;
    }else
    {
        return false;
    }
}
//----------------------------------------------------
bool Cirque::IsFull(){
    if ((rear + 1) % size == front) {
        return true;
    }
    else{
        return false;
    }
}
//----------------------------------------------------
int Cirque::Enque(int data){
    if (!IsFull()) {
        base[rear] = data;
        rear = (rear + 1) % size;
        return 0;
    }
    else{
        return -1;
    }
}
//----------------------------------------------------
int Cirque::Deque(){
    if (!IsEmpty()) {
        int da = base[front];
        front = (front + 1) % size;
        return da;
    }
    else{
        exit(-1);       //其实没必要。。。
    }
}
//----------------------------------------------------
Cirque::~Cirque(){
    delete base;
    base = NULL;
}
//----------------------------------------------------

main.cpp

//本题是做一个顺序存储的循环队列,使用判满方法是尾指针一直比头指针多一位
//判空是头尾指针在一起。
#include <iostream>
#include "cirqueue.h"
using std::cout;
using std::endl;
int main(int argc, const char * argv[])
{
    Cirque c1;
    Cirque c2;
    c1.Enque(3);
    c2.Enque(4);
    cout << c1.Deque() << endl;
    cout << c2.Deque() << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值