循环队列

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






















 

posted @ 2019-02-24 00:16  ForMeDream  阅读(117)  评论(0编辑  收藏  举报