您的位置:首页 > 其它

循环队列的顺序存储结构及其操作

2014-02-09 17:51 417 查看
#include "stdafx.h"
#include <iostream>
#include <exception>
using namespace std;

//循环队列的顺序存储结构
typedef int QElemType;
typedef int Status;
const int ok = 1;
const int error = 0;
const int maxSize = 5;

typedef struct
{
QElemType data[maxSize];
int front;
int rear;
}SqQueue,*pSqQueue;

//初始化队列
Status InitQueue(SqQueue *Q)
{
Q->front = 0;
Q->rear = 0;
for(int i = 0;i!=maxSize;++i)
Q->data[i]=0;
return ok;
}

//获取队列长度
int QueueLenght(const SqQueue *Q)
{
return (maxSize-Q->front+Q->rear)%maxSize;
}

//入队操作,如果队列未满,则插入元素e为Q新的队尾元素
Status EnQueue(SqQueue *Q,const int &e)
{
if((Q->rear+1)%maxSize==Q->front)
{
cout<<"队列已满,入队失败!"<<endl;
return error;
}
Q->data[Q->rear]=e;
Q->rear=(Q->rear+1)%maxSize;
return ok;
}
Status DeQueue(SqQueue *Q)
{
if(Q->rear==Q->front)
return error;
cout<<"出队列:"<<Q->data[Q->front]<<endl;;
Q->front=(Q->front+1)%maxSize;
return ok;
}
void outputQueue(const SqQueue *Q)
{
if(Q->rear == Q->front)
{
cout<<"队列空了!"<<endl;
return ;
}

if(Q->rear>Q->front)
{
for(int i = Q->front ;i != Q->rear;i++)
cout<<Q->data[i]<<"  ";
}
else
{
for(int i = Q->front;i!=maxSize;++i)
{
cout<<Q->data[i]<<"  ";
}
for(int j = 0;j!=Q->rear;++j)
{
cout<<Q->data[j]<<"  ";
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
SqQueue *qQueue = new SqQueue;
InitQueue(qQueue);
EnQueue(qQueue,1);
EnQueue(qQueue,2);
EnQueue(qQueue,3);
EnQueue(qQueue,4);
DeQueue(qQueue);
DeQueue(qQueue);
DeQueue(qQueue);
DeQueue(qQueue);
EnQueue(qQueue,5);
DeQueue(qQueue);
cout<<"队列长度为:"<<QueueLenght(qQueue)<<endl;
outputQueue(qQueue);
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: