C语言队列问题,求高手帮忙看下

2025-01-01 11:46:07
推荐回答(4个)
回答1:

rear=p;应该是这句话的问题,你的参数truct duilie *rear,这么写可以改变rear指向内容的值,但不能改变rear指向的内容,应该使用指向指针的指针
void insert(struct duilie **rear,int a) //a为要入队的数值,rear是尾指针
{
struct duilie *p,*pp;
p=(struct duilie *)malloc(sizeof(struct duilie));
p->num=a;
pp=(*rear)->next; //使PP指向队列的头结点,据我调试,是这语句出错了
(*rear)->next=p; //使新节点接在最后一个节点的后面
*rear=p; //尾指针往后移
(*rear->next)=pp; //把队列的头结点和尾节点连接,构成循环队列
}
调用的时候把队尾指针的地址传过来

回答2:

我还没有学到那里。星期天 ,我帮你吧。

回答3:

struct duilie * insert(struct duilie *rear,int a) //a为要入队的数值,rear是尾指针
{
struct duilie *p,*pp;
p=(struct duilie *)malloc(sizeof(struct duilie));
p->num=a;
pp=rear->next; //使PP指向队列的头结点,据我调试,是这语句出错了
rear->next=p; //使新节点接在最后一个节点的后面
p->next=pp; //把队列的头结点和尾节点连接,构成循环队列
return p;
}
这样调用 rear=insert(rear,a);
这个函数改变了 rear 但是,函数中改变的只是形参的值。用返回可以把值传回来。
不要被 它传入的是个指针给欺骗了。以为可以在函数改变值。
不想用返回,就得在传入函数时是 这个指针的地址才行,现在传入的是指针的内容。

回答4:

是编译器报的空指针赋值吧?主要原因:作者没有搞清楚C中的全局变量和局部变量的问题。
1。zts[35];point1[35];point2[35];x1[35]这四个数组在main()中有,在四个子函数中有,各是各的,互不干涉,所以main()中的这四个数组始终没有被赋值过,空指针指的就是这个吧。
2。应该把这四个数组的首地址作为四个read()的参数传过去,就可以实现:“在子函数中赋值,在main函数中使用” 的设计目的了。看程序,感觉作者就是这个目的吧。
3。 魔尊8 说的有一定道理,这四个read确实没有起到应有的作用。加上数组首地址做参数就可以了。或者把这四个数组做成全局变量也行啊。
4。作者有时间的话还是应该好好看看C语言的书啊。