循环队列(c语言)

来源:互联网 发布:爱青岛软件 编辑:程序博客网 时间:2024/06/11 15:13
#include <stdio.h>#include <stdlib.h>struct QueueRecord{int capacity;int front;int rear;int size;char * array;};struct QueueRecord * createqueue(int size){char * p;struct QueueRecord *queue;p=(char *)malloc(size);queue=(struct QueueRecord *)malloc(sizeof(struct QueueRecord));queue->capacity=size;queue->size=0;queue->array=p;queue->front=0;queue->rear=0;}int isfull(struct QueueRecord *q){return q->size==q->capacity;}int isempty(struct QueueRecord *q){return q->size==0;}int succ (int value,struct QueueRecord *q){value++;if(value==q->capacity){value=0;}return value;}void enqueue(char x,struct QueueRecord * q){if(isfull(q)){printf("full\n");return;}q->size++;q->array[q->rear]=x;q->rear=succ(q->rear,q);}int dequeue(struct QueueRecord *q){int x;if(isempty(q)){printf("empty\n");return -1;}else{q->size--;x=q->array[q->front];q->front=succ(q->front,q);return x;}}void queue_view(struct QueueRecord *q){int i;int tmp;printf("front=%d\n",q->front); printf("rear=%d\n",q->rear); printf("size=%d\n",q->size); for(i=0;i<q->size;i++){tmp=q->front+i;if(tmp >= q->capacity){tmp=tmp-q->capacity;}printf("no[%d]=%d\n",tmp,q->array[tmp]);}}int main(){int i;struct QueueRecord *queue;queue=createqueue(5);for(i=0;i<5;i++){enqueue(i,queue);}queue_view(queue);for(i=0;i<2;i++){printf("de[%d]=%d\n",i,dequeue(queue));}enqueue(5,queue);enqueue(6,queue);printf("******************\n");queue_view(queue);}


原创粉丝点击