循环队列

来源:互联网 发布:ios10蜂窝数据开关在哪 编辑:程序博客网 时间:2024/06/05 18:26
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct Queue{    int * pBase;    int front;    int rear;}Queue ,* PQueue;void init_queue(PQueue pq);void queue_shift(PQueue pq,int val);int is_full(PQueue pq);void show_queue(PQueue pq);int is_empty(PQueue pq);void queue_unshift(PQueue pq);int main(void){    Queue q;    init_queue(&q);    queue_shift(&q,1);    queue_shift(&q,3);    queue_shift(&q,2);    queue_shift(&q,4);    printf("%s\n", "插入之后的结果是:");    show_queue(&q);    queue_unshift(&q);    queue_unshift(&q);    printf("%s\n", "弹出之后的结果是:");    show_queue(&q);    return 0;}void init_queue(PQueue pq){    pq->pBase = (int *)malloc(sizeof(int)*5);    pq->front=0;    pq->rear=0;}void queue_shift(PQueue pq,int val){    if(is_full(pq)){        printf("%s\n", "队列已经满了!不能再插入了!");        return;    }else{        pq->pBase[pq->rear]=val;        pq->rear = (pq->rear+1)%5;    }}int is_full(PQueue pq){    if((pq->rear+1)%5==pq->front){        return 1;    }else{        return 0;    }}int is_empty(PQueue pq){    if(pq->front==pq->rear){        return 1;    }else{        return 0;    }}void show_queue(PQueue pq){    int i = pq->front;    while(i!=pq->rear){            printf("%d ",pq->pBase[i] );        i=(i+1)%5;    }    printf("\n");}void queue_unshift(PQueue pq){    if(is_empty(pq)){        printf("%s\n", "队列已经是空的了,不能弹出了!");        return;    }else{        printf("弹出的是:%d\n", pq->pBase[pq->front]);        pq->front = (pq->front+1)%5;    }}

0 0
原创粉丝点击