循环队列
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#define MAX 500
typedef struct{
int head;
int tail;
int* que;
int num;
}QUE;
void initQueue(QUE* q){
memset(q,0,sizeof(QUE));
q->que=(int*)malloc(sizeof(int)*MAX);
memset(q,0,sizeof(q->que));
}
void desQueue(QUE* q){
free(q->que);
free(q);
}
void push(QUE* q,int fd){
if(q->num<MAX){
if(q->tail>MAX-1){
q->tail=0;
}
q->que[q->tail]=fd;
q->tail++;
q->num++;
}else{
printf("queue is full num=%d\n",q->num);
return;
}
}
int pop(QUE* q){
if(q->num==0){
puts("queue is empty");
return 0;
}else{
if(q->head>MAX-1){
q->head=0;
}
int tem=q->que[q->head];
q->que[q->head]=0;
q->head++;
q->num--;
return tem;
}
}
int main(){
QUE* q=(QUE*)malloc(sizeof(QUE));
initQueue(q);
for(int i=0;i<MAX;i++){
push(q,i);
// printf("que num is %d\n",q->num);
}
for(int i=0;i<MAX;i++){
printf("%d ",pop(q));
}
desQueue(q);
}