using namespace std;
typedef int QElemType;
#define MAXQSIZE 100
struct linkqueue //创建循环队列结构体
{
QElemType *base; //初始化的动态分配存储空间
int front; //队头指针
int rear; //队尾指针
};
int InitQueue(linkqueue &Q) //构造一个空队列
{
Q.base=new QElemType[MAXQSIZE];
if(!Q.base) return 0; //存储分配失败
Q.front=Q.rear=NULL;
return 1;
}
int QueueLength(linkqueue Q) //返回Q的元素个数,即队列的长度
{
return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; //(+MAXQSIZE)%MAXQSIZE -避免队尾指针小于队头指针时返回值是负数
}
int EnQueue(linkqueue &Q,QElemType e) //插入元素e为Q的新的队尾元素
{
if((Q.rear+1)%MAXQSIZE==Q.front) return 0;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return 1;
}
int DeQueue(linkqueue &Q,QElemType &e) //若队列不空,则删除Q的队头元素,用e返回其值
{
if(Q.front==Q.rear) return 0;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return 1;
}
int main()
{
int e=2,x;
linkqueue Q;
InitQueue(Q);
EnQueue(Q,e);
cout<<QueueLength(Q)<<endl;
DeQueue(Q,x);
cout<<x;
while (1){}
return 0;
}
————————————————————————————————————————————
/*循环队列-队列的顺序存储结构*/
struct linkqueue //创建循环队列结构体
{
QElemType *base; //初始化的动态分配存储空间
int front; //队头指针
int rear; //队尾指针
};
/*初始化*/
int InitQueue(linkqueue &Q) //构造一个空队列
{
Q.base=new QElemType[MAXQSIZE];
if(!Q.base) return 0; //存储分配失败
Q.front=Q.rear=NULL;
return 1;
}
/*长度*/
int QueueLength(linkqueue Q) //返回Q的元素个数,即队列的长度
{
return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; //(+MAXQSIZE)%MAXQSIZE -避免队尾指针小于队头指针时返回值是负数
}
/*插入*/
int EnQueue(linkqueue &Q,QElemType e) //插入元素e为Q的新的队尾元素
{
if((Q.rear+1)%MAXQSIZE==Q.front) return 0;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return 1;
}
/*删除*/
int DeQueue(linkqueue &Q,QElemType &e) //若队列不空,则删除Q的队头元素,用e返回其值
{
if(Q.front==Q.rear) return 0;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return 1;
}