帮忙看一个代码(循环队列)~
这个代码不是自己弄的,就是帮忙看看,最近弄别的去没啥弄代码了,就是帮忙看看,说是逻辑问题
~
程序代码:
#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;
}









