#include <stdio.h>
#include <malloc.h>
typedef struct Queue
{
int *a;
int front;
int rear;
}QQ;
int n;
void init(QQ *pQ); //定义一个队列
bool add(QQ *pQ,int val); //入队
bool del(QQ *pQ); //出队
bool is_full(QQ *pQ); //判断队列是否满
bool is_empty(QQ *pQ); //判断队列是否为空
void show(QQ *pQ); //输出队列
int main()
{
int val , n1 , i = 1;
printf("您想要建立一个几节队列:");
scanf( "%d", & n1 );
n = n1 + 1;
QQ Q;
init( &Q );
while( i )
{
printf("对队列的操作:\n按“1”添加元素;\n按“2”删除元素;\n按“3”显示队列所有元素。\n你的操作是:");
scanf( "%d", & i);
switch( i )
{
case 1:
printf("请输入你要加入队列的内容:");
scanf( "%d", & val );
if( add( &Q , val ) )
printf("\n操作成功!\n\n");
else
printf("\n操作失败,队列已满!\n\n");
break;
case 2:
if( del( &Q ) )
printf("\n操作成功!\n\n");
else
printf("\n操作失败,队列是空的!\n\n");
break;
case 3:
show(&Q);
break;
}
}
}
void init(QQ *pQ)
{
pQ->a = (int *)malloc(sizeof(int) * n);
pQ->front = 0;
pQ->rear = 0;
}
bool is_full(QQ *pQ)
{
if( (pQ->rear + 1) % n == pQ->front)
return true;
else
return false;
}
bool add(QQ *pQ,int val)
{
if( is_full(pQ) )
return false;
pQ->a[pQ->rear] = val;
pQ->rear = ( pQ->rear + 1 ) % n;
return true;
}
bool is_empty(QQ *pQ)
{
if( pQ->front == pQ->rear )
return true;
else
return false;
}
bool del(QQ *pQ)
{
if( is_empty(pQ) )
return false;
pQ->front = ( pQ->front + 1 ) % n;
return true;
}
void show(QQ *pQ)
{
printf("\n");
int i = pQ->front;
while( i != pQ->rear )
{
printf("%d ", pQ->a[i]);
i = ( i + 1 ) % n;
}
printf("\n\n");
}