书上的的例题有错,大家给看看为什么我这么改不对
题目是求队列中元素个数的
程序代码:#include<stdio.h>
#define Maxlen 20
typedef char elemtype;
typedef struct
{
elemtype data[Maxlen];
int front,rear;
}queue;
int count(queue *sq)
{
return (sq->rear-sq->front+Maxlen)%Maxlen;
}
void init(queue *sq)//初始化空栈
{
sq->front=0;
sq->rear=0;
}
int enqueue(queue *sq,elemtype x)//入队
{
if((sq->rear+1)%Maxlen==sq->front)//队列上溢出(队满)
return 0;
else
{
sq->rear=(sq->rear+1)%Maxlen;
sq->data[sq->rear]=x;
return 1;
}
}
int outqueue(queue *sq,elemtype *x)//出队
{
if(sq->rear==sq->front)//队空
return 0;
else
{
sq->front=(sq->front+1)%Maxlen;//出队
*x=sq->data[sq->front];
return 1;
}
}
void main()
{
queue *sq;
elemtype x;
init(&sq);//初始化空队
printf("a入队\n");
enqueue(&sq,'a');
printf("b入队\n");
enqueue(&sq,'b');
printf("c入队\n");
enqueue(&sq,'c');
printf("出队一次\n");
outqueue(&sq,&x);
printf("d入队\n");
enqueue(&sq,'d');
printf("出队一次\n");
outqueue(&sq,&x);
printf("e入队\n");
enqueue(&sq,'e');
printf("f入队\n");
enqueue(&sq,'f');
printf("队列中的元素个数为%d",count(&sq));
}
这是书上的原例子,显然是不对的,一级指针传递错误,
程序代码:#include<stdio.h>
#define Maxlen 20
typedef char elemtype;
typedef struct
{
elemtype data[Maxlen];
int front,rear;
}queue;
int count(queue **sq)
{
return (*sq->rear-*sq->front+Maxlen)%Maxlen;
}
void init(queue **sq)//初始化空栈
{
*sq->front=0;
*sq->rear=0;
}
int enqueue(queue **sq,elemtype x)//入队
{
if((*sq->rear+1)%Maxlen==*sq->front)//队列上溢出(队满)
return 0;
else
{
*sq->rear=(*sq->rear+1)%Maxlen;
*sq->data[*sq->rear]=x;
return 1;
}
}
int outqueue(queue **sq,elemtype *x)//出队
{
if(*sq->rear==*sq->front)//队空
return 0;
else
{
*sq->front=(*sq->front+1)%Maxlen;//出队
*x=*sq->data[*sq->front];
return 1;
}
}
void main()
{
queue *sq,**sw;
sw=&sq;
elemtype x;
init(sw);//初始化空队
printf("a入队\n");
enqueue(sw,'a');
printf("b入队\n");
enqueue(sw,'b');
printf("c入队\n");
enqueue(sw,'c');
printf("出队一次\n");
outqueue(sw,&x);
printf("d入队\n");
enqueue(sw,'d');
printf("出队一次\n");
outqueue(sw,&x);
printf("e入队\n");
enqueue(sw,'e');
printf("f入队\n");
enqueue(sw,'f');
printf("队列中的元素个数为%d",count(sw));
}
这是我改后的,改成二级指针调用,但是还是有错误,不知道哦啊错在哪里,说是指针没指向结构体类型,不知为何,请前辈指教一二,谢谢了[ 本帖最后由 遮天云 于 2010-11-20 11:00 编辑 ]




