#include
#include
#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define INIT_QUEUE_SIZE 5//当前分配的最大空间
#define QUEUEINCREMENT 10
typedef int Status;
typedef float QElemType ;
typedef struct
{
QElemType* base;//初始化的动态分配存储空间
int front;
int rear;
}SqQueue;
//循环队列基本操作的算法实现
Status InitQueue_sq(SqQueue &Q)
{
Q.base = (QElemType*)malloc(INIT_QUEUE_SIZE*sizeof(QElemType));
if(!Q.base)
exit(OVERFLOW);//分配空间失败
Q.front = Q.rear =0;
return OK;
}
//插入元素
Status EnQueue_sq(SqQueue &Q,QElemType &e)
{
//插入新的元素
if((Q.rear +1)%INIT_QUEUE_SIZE ==Q.front )//空出来一个新的位置
{
printf("空间满了!!,正在开辟空间\n");
Q.base = (QElemType*)malloc((INIT_QUEUE_SIZE+QUEUEINCREMENT)*sizeof(QElemType));
Q.base [Q.rear ]=e;
Q.rear =(Q.rear ++)%INIT_QUEUE_SIZE;//没插入一个元素,rear就要加一;
}
else
{
Q.base [Q.rear ]=e;
Q.rear =( Q.rear +1)%INIT_QUEUE_SIZE;//没插入一个元素,rear就要加一;
}
return 0;
}
//删除元素.用e返回删除元素
Status DeQueue_sq(SqQueue &Q,QElemType &e)
{
if(Q.front =Q.rear )
{
printf("这是一个空的循环队列\n");
return ERROR;
}
e = Q.base [Q.front ];
Q.front =(Q.front +1)%INIT_QUEUE_SIZE;
return OK;
}
//输出数据的函数
void PrintQueue_sq(SqQueue Q)
{
int i;
if(Q.front ==Q.rear ) printf("空队列!\n");
else
{
i=Q.front;
while(i!=Q.rear)
{
printf("%d ",Q.base[i]);
i=(i+1)%INIT_QUEUE_SIZE;
}
printf("\n");
}
}
int main()
{
printf(" 对循坏队列的基本操作如下 \n ");
int num;//插入元素的个数
int j;//控制循环
QElemType elem;//元素
SqQueue Q;
//初始化
InitQueue_sq(Q);
//插入元素
printf("输入插入元素的个数:");
scanf("%d",&num);
printf("\n");
printf("输入需要插入的数据:");
for(j=0;j<num;j++)
{
scanf("%d",&elem);
EnQueue_sq(Q,elem );
}
printf("插入操作后循环队列中的数为:");
PrintQueue_sq(Q);//输出队列
//删除队列
printf("输入需要删除队列的元素个数::");
scanf("%d",&num);
printf("输出删除的额元素为:");
for(j = 0;j<num;j++)
{
DeQueue_sq(Q,elem);
printf("%d",elem);
}
printf("删除操作后循环队列中的数为:");
PrintQueue_sq(Q);
return 0;
}