队列的顺序表示和实现
作者:
gzcoder
,
2021-10-12 11:31:11
,
所有人可见
,
阅读 201
#include <iostream>
using namespace std;
//--------队列的顺序存储结构-------
#define MAXQSIZE 100 //队列可能达到的最大长度
typedef int QElemType;//存储的数据类型
typedef struct queue
{
QElemType *base; //存储空间的基地址
int front;
int rear;
}SqQueue;
bool InitQueue(SqQueue &Q)//构造一个空队列
{
Q.base = new QElemType[MAXQSIZE]; //为队列分配一个最大容量为MAXQSIZE的数组空间
if(!Q.base) exit(1); //存储分配失败
Q.front=Q.rear=0; //头指针和尾指针置为零,队列为空
return true;
}
int QueueLength(SqQueue &Q)//返回Q的元素个数,即队列的长度
{
return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
bool EnQueue(SqQueue &Q,QElemType e)//插入元素e,为Q的新的队尾元素
{
if((Q.rear+1) % MAXQSIZE == Q.front)
return false;
Q.base[Q.rear] = e;
Q.rear = (Q.rear+1) % MAXQSIZE; //队尾指针加1
return true;
}
bool DeQueue(SqQueue &Q,QElemType &e)//删除Q的队头元素,用e返回其值
{
if(Q.front == Q.rear) return false;
e = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXQSIZE;
return true;
}
QElemType GetHead(SqQueue &Q)//返回Q的队头元素,不修改队头指针
{
if(Q.front != Q.rear) //队列非空
return Q.base[Q.front];
}
void PrintQueue(SqQueue &Q)//打印队列元素
{
cout<<"队列:";
if(Q.front == Q.rear){
cout<<"空"<<endl;
return;
}
cout<<" [队头]-> ";
for(int i=Q.front;i != Q.rear;i=(i + 1) % MAXQSIZE)//遍历队列
{
cout<<Q.base[i]<<" \n"[((Q.rear-i+MAXQSIZE) % MAXQSIZE) == 1];
}
}
int main()
{
SqQueue Q;
InitQueue(Q);
cout<<"初始化队列成功!"<<endl;
char c='!';
while(c!='0')
{
cin>>c;
if(c == 'L'){
cout<<"队列的长度为:"<<QueueLength(Q)<<endl;
}else if(c == 'E'){
int e;
cin>>e;
if(EnQueue(Q,e))
cout<<"插入元素成功!"<<endl;
else
cout<<"队列已满!"<<endl;
}else if(c == 'D'){
int e;
if(DeQueue(Q,e))
cout<<"元素 "<<e<<" 出队成功!"<<endl;
else
cout<<"队列为空!"<<endl;
}else if(c == 'G'){
int e;
e=GetHead(Q);
cout<<"对头元素值为:"<<e<<endl;
}else if(c == 'P'){
PrintQueue(Q);
}
}
return 0;
}