/*
 * main.c
 * 队列
 *  Created on: Oct 29, 2010
 *      Author: jenson
 */
#include
#include

#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        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        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;
    }
}