队列的顺序存储——循环队列

队列允许在一端进行插入操作,在另一端进行删除操作的线性表。

1.允许插入(也称入队、进队)的一端称为队尾,允许删除(也称出队)的一端称为队头

队列的这种首尾相接的顺序存储称为循环队列

1.为了实现元素出队之后,不移动其他的数据元素,并且可以循环利用空闲下来的数组空间。

2.队空的条件:start==rear。

3.队满的条件:(rear+1)%QueueSize==start。


代码:

#include<iostream>

using namespace std;

const int MaxSize=100;

class CirQueue
{
private:
    int data[MaxSize];
    int start,rear;
public:
    CirQueue(){start=rear=MaxSize-1;}
    CirQueue(int a[],int n);
    ~CirQueue(){}
    void EnQueue(int x);
    int DeQueue();
    int GetQueue();
    int Empty();
    void Destroy();
    void PrintStack();
};
CirQueue::CirQueue(int a[],int n)
{
    start=rear=MaxSize-1;
    if((rear+1)%MaxSize==start) throw "上溢";
    for(int i=0;i<n;i++)
    {
        rear=(rear+1)%MaxSize;
        data[rear]=a[i];
    }
}
void CirQueue::EnQueue(int x)
{
    if((rear+1)%MaxSize==start) throw "上溢";
    rear=(rear+1)%MaxSize;
    data[rear]=x;
}
int CirQueue::DeQueue()
{
    if(start==rear) throw "下溢";
    start=(start+1)%MaxSize;
    return data[start];
}
int CirQueue::GetQueue()
{
    if(start==rear) throw "下溢";
    int i=(start+1)%MaxSize;
    return data[i];
}
int CirQueue::Empty()
{
    if(rear==start) return 1;
    else return 0;
}
void CirQueue::Destroy()
{
    while(start!=rear)
    {
        start=(start+1)%MaxSize;
    }
}
void CirQueue::PrintStack()
{
    for(int i=(start+1)%MaxSize;i<=rear;i++)
    {
        cout<<data[i]<<" ";
    }
    cout<<endl;
}
int main()
{
    int a[5]={4,0,5,9,7};
    CirQueue cq(a,5);
    cq.EnQueue(1);
    cq.PrintStack();
    cq.EnQueue(2);
    cq.PrintStack();
    cout<<cq.GetQueue()<<endl;

    cq.EnQueue(3);
    cq.PrintStack();

    cout<<cq.Empty()<<endl;
    cout<<cq.GetQueue()<<endl;

    cout<<cq.DeQueue()<<endl;
    cq.PrintStack();

    cq.Destroy();
    cq.PrintStack();
    cout<<cq.Empty()<<endl;

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值