#define MAX_SIZE 8
#include <stdio.h>
int intQueueNum = 1; /*队列号*/
typedef struct Queue
{
int space[MAX_SIZE];
int front,rear;
int sum;
};
int main()
{
void InitQueue(struct Queue* q);
void AddQueueMember(struct Queue* q) ;
void RemoveQueueMember(struct Queue* q);
void GetWaitMember(struct Queue* q);
void PrintQueue(struct Queue* q);
int myCase;
struct Queue *q=NULL;
InitQueue(q);
while(1)
{
printf("/n press 0:exit,1:In,2:Out,3:getwait/n");
scanf("%d",&myCase);
if(myCase == 0) return 0;
else if (myCase == 1)
{
AddQueueMember(q);
PrintQueue(q);
}
else if (myCase == 2)
{
RemoveQueueMember(q);
PrintQueue(q);
}
if(myCase == 3)GetWaitMember(q);
}
getch();
return 0;
}
void InitQueue(struct Queue* q) /*初始化front 0 rear 0*/
{
int i;
q->front = -1;
q->rear = -1;
q->sum = 0;
for(i=0;i<MAX_SIZE;i++)
{
q->space[i]=0;
}
}
void AddQueueMember(struct Queue* q) /*入队*/
{
if(q->sum == MAX_SIZE)
{printf("the queue is full/n");return;}
else
{
if(q->rear ==MAX_SIZE-1) q->rear = 0;
else q->rear++;
q->space[q->rear] = intQueueNum++;
q->sum++;
}
}
void RemoveQueueMember(struct Queue* q) /*出队*/
{
if(q->sum == 0)
{return;}
else
{
q->front++;
if(q->front == MAX_SIZE){ q->front = 0;}
q->sum--;
}
}
void GetWaitMember(struct Queue* q)
{
int i,number;
printf("input the number/n");
scanf("%d",&number);
for(i=0;i<MAX_SIZE;i++)
{
if(q->space[i]==number){printf("i=%d/n",i);break;i++;}
}
if(q->front > i)
{
printf("it must wait for %d people/n",MAX_SIZE - q->front + i);
}
else printf("it must wait for %d people/n",i-q->front-1);
}
void PrintQueue(struct Queue* q) /*输出当前队伍*/
{
int i,temp;
if(q->sum == 0)
{printf("the queue is empty /n");return;}
else
{
printf("/nf=%d,r=%d/n",q->front,q->rear);
printf("the sum number is %d/n",q->sum);
printf("list:");
temp = q->front+1;
for(i=0;i<q->sum;i++)
{
if(temp >=MAX_SIZE) temp=0;
printf("%d ",q->space[temp++]);
}
printf("/nlistALL:");
for(i=0;i<8;i++)
{
printf("%d ",q->space[i]);
}
}
}