/*
* main.c
* 队列
* Created on: Oct 29, 2010
* Author: jenson
*/
#include <stdlib.h>
#include <stdio.h>
#define MAX 10
void init(int * front, int *rear);
int empty(int *front, int *rear);
int en_queue(int q[], int x, int * front, int * rear);
int de_queue(int q[], int *y, int *front, int *rear);
int main() {
int q[MAX];
int f = 0,r = 0;
int i,x,m,n,a;
init(&f,&r);
printf("要输入队列的个数:\n");
scanf("%d",&m);
for(i = 0;i<m;i++){
i = i;
scanf("%d",&x);
a = en_queue(q,x,&f,&r);
if(a == -1){
break;
}
}
printf("要从队列提取元素个数:\n");
scanf("%d",&n);
for(i = 0;i<n;i++){
if(de_queue(q,&x,&f,&r)==-1){
break;
}
printf("%d\n",x);
}
if(empty(&f,&r) == 1){
printf("队列为空\n");
}else{
printf("队列中还有%d个元素.",(m-n));
}
return 0;
}
void init(int * front, int *rear) {
*front = 0;
*rear = 0;
}
int empty(int *front, int *rear) {
if (*front == *rear) {
return 1;
} else {
return 0;
}
}
int en_queue(int q[], int x, int * front, int * rear) {
*rear = (*rear + 1) % MAX;
if (*front == *rear) {
perror("队列发生上溢\n");
return -1;
} else {
q[*rear] = x;
return 0;
}
}
int de_queue(int q[], int *y, int *front, int *rear) {
*front = (*front + 1) / MAX;
if (*front == *rear) {
perror("队列发生下溢\n");
return -1;
} else {
*y = q[*front];
return 0;
}
}