帮忙看一个代码(循环队列)~
这个代码不是自己弄的,就是帮忙看看,最近弄别的去没啥弄代码了,就是帮忙看看,说是逻辑问题~程序代码:
#include<stdio.h> #define MAXSIZE 4 typedef struct { int rear; int front; int *base; }queue,*que; void inqueue(que q,int e);//入队 void dequeue(que q,int*e);//出队 int isempty(que q); int getlength(que q); void print(que q); int main( void ) { queue q; int e,length; init(&q); inqueue(&q,1); inqueue(&q,2); inqueue(&q,3); print(&q); dequeue(&q,&e); printf("e=%d\n",e); dequeue(&q,&e); printf("e=%d\n",e); dequeue(&q,&e); printf("e=%d\n",e); print(&q); inqueue(&q,4); inqueue(&q,5); inqueue(&q,6); print(&q); dequeue(&q,&e); printf("e=%d\n",e); dequeue(&q,&e); printf("e=%d\n",e); dequeue(&q,&e); printf("e=%d\n",e); print(&q); return 0; } int init(que q) { q->base=(que)malloc(sizeof(queue)*MAXSIZE); if(!(q->base)) return 0; q->front=q->rear=0; return 1; } void inqueue(que q,int e) {//入队列 当前队列没有满【判断队满(rear+1)%MAXSIZE==front】就继续入 if((q->rear+1)%MAXSIZE!=q->front) { q->base[q->rear]=e; q->rear=(q->rear+1)%MAXSIZE; } } void dequeue(que q,int *e) {//出队列 当前这个队列不为空 if(q->front!=q->rear) { *e=q->base[q->front]; q->front=(q->front+1)%MAXSIZE; } } void print(que q) { for(int i=0;i<4;i++) { printf("%d ",q->base[i]); } printf("\n"); } int getlength(que q) { int length=0; length=(q->rear-q->front+MAXSIZE)%MAXSIZE; printf("length:%d\n",length); return length; }