循环队列的实现

来源:互联网 发布:一句话网络段子精选 编辑:程序博客网 时间:2024/05/18 17:27
/*  队列是一种先进先出的线性表,具有线性表的特性:分为链式队列与顺序队列 
    顺序队列:用一段地址连续的存储单元存储数据元素,定义两个游标:指向队头 
    的游标(front)、指向队尾的游标(rear),如果front == rear队列为空,如果 
    (rear + 1) % MAXSIZE == front队列满(此为循环队列),如普通队列rear==MAXSIZE队列满 */ 
#include <iostream>
#include <assert.h>
using namespace std;
const int QueueSize=100;
typedef int elemtype;


class CirQueue
{
private:
elemtype data[QueueSize];   
int front; //队头
int rear; //队尾
public:
void InitQueue(); //初始化队列,构造一个空队列
void EnQueue(elemtype x); //元素x进队
elemtype DeQueue();         //队头的元素出队 
elemtype GetQueue();       //获取队头元素
bool IsEmpty(); //判断队列是否为空 
int GetQueueLength(); //返回队列的长度
};


void CirQueue::InitQueue()
{
front=rear=QueueSize-1;
}


void CirQueue::EnQueue(elemtype x)
{
if ((rear+1) % QueueSize ==front) throw "上溢";
rear=(rear+1) % QueueSize;    
data[rear]=x;                 
}
elemtype CirQueue::DeQueue( )
{
if (rear==front) throw "下溢"; 
front=(front+1) % QueueSize; 
return data[front];

elemtype CirQueue::GetQueue( )
{
if (rear==front) throw "下溢"; 
int i=(front+1) % QueueSize;  
return data[i];
}
bool CirQueue::IsEmpty() //判断队列是否为空  
{  
return front == rear ? true : false;  

int CirQueue::GetQueueLength() //返回队列的长度  
{  
return (rear - front + QueueSize) %QueueSize;  

void main()
{
CirQueue cq;
cq.InitQueue();
cq.EnQueue(2);
cq.EnQueue(3);
cout<<cq.DeQueue();
}
0 0
原创粉丝点击