您的位置:首页 > 编程语言 > C语言/C++

C语言实现队列

2010-10-29 22:22 281 查看
/*
* 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;
}
}

本文出自 “有思想的代码” 博客,请务必保留此出处http://wujuxiang.blog.51cto.com/2250829/412542
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: