// C语言,队列的实现
#include<stdio.h>
#include<stdlib.h>
#define QUEUE_SIZE (50) // 设置队列的大小
typedef struct SeqQueue{
int data[QUEUE_SIZE]; // 队列元素
int front; // 队列的头
int rear; // 队列的尾
int count; // 队列当前的元素个数
}Queue;
Queue *InitQueue(){ // 队列初始化
Queue *q = (Queue*)malloc(sizeof(Queue));
if(q == NULL){
printf("malloc failed!\n");
exit(-1);
}
q->front = 0;
q->rear = 0;
q->count = 0;
return q;
}
int IsFull(Queue* q){
return (q->count == QUEUE_SIZE);
}
int IsEmpty(Queue* q){
return (q->count == 0);
}
void Enqueue(Queue* q, int n){ // 队列添加元素,只能追加在末尾
if(IsFull(q)){
printf("Already full, n = %d\n", n);
return;
}
q->data[q->rear] = n; // 将元素加入队列
q->rear = (q->rear+1) % QUEUE_SIZE; // 注意这里用求余操作代替了数据的移动。
q->count++;
}
int Dequeue(Queue* q){ // 队列删除元素,只能从头删除
if(IsEmpty(q)){
return 0;
}
int tmp = q->data[q->front];
q->front = (q->front+1) % QUEUE_SIZE; // 删除了头后,起始位置也变了
q->count--;
return tmp;
}
int main(void){
Queue* q = InitQueue();
int i;
for(i = 0; i < 50; i++){
Enqueue(q, i);
}
while(!IsEmpty(q)){
int data = Dequeue(q);
printf("%d-->",data);
}
free(q);
return 0;
}