#include<iostream>
using namespace std ;
#define MAXSIZE 100
typedef struct Queue
{
char *base ;
int front ;
int rear ;
}Queue ;
/*初始化循环队列*/
void Create(Queue &q)
{
q.base = (char *)malloc(MAXSIZE * sizeof(char));
if(!q.base)
{
cout<<"分配内存失败"<<endl;
exit(1);
}
q.front = q.rear = NULL ;
}
/*插入数据到循环列表*/
void Push(Queue &q , char e)
{
if((q.rear + 1) % MAXSIZE == q.front)
{
cout<<"队列满了,不能再插入数据"<<endl;
return ;
}
q.base[q.rear] = e ;
q.rear = (q.rear + 1) % MAXSIZE ;
return ;
}
/*输出数据*/
void outprint(char e)
{
cout<<e ;
}
/*遍历整个循环列表*/
void TraQueue(Queue q)
{
if(q.front == q.rear)
{
cout<<"队列为空"<<endl;
return ;
}
while(q.front != q.rear){
outprint(q.base[q.front]);
q.front = (q.front + 1)%MAXSIZE ;
}
return ;
}
char Pop(Queue &q , char &e)
{
if(q.front == q.rear)
{
cout<<"队列为空"<<endl;
return e = '0';
}
e = q.base[q.front] ;
q.front = (q.front + 1) % MAXSIZE ;
return e ;
}
int main(void)
{
Queue q;
Create(q);
cout<<"插入数据到循环队列:"<<endl;
char e ;
for(int i = 0 ; i < 10 ; i ++)
{
e = 'A' + i ;
Push(q , e);
}
TraQueue(q);
cout<<endl;
while((Pop(q , e))!= '0') {
cout<<"删除首部元素: "<<e<<endl;
TraQueue(q);
cout<<endl;
}
return 0;
}