书上的的例题有错,大家给看看为什么我这么改不对
题目是求队列中元素个数的程序代码:
#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 编辑 ]