【发布时间】:2012-04-11 22:09:11
【问题描述】:
我尝试使用两个函数直接对我在链表中输入的数字进行排序,第一个在头部添加元素,第二个包含分段错误应该利用第一个来完成这项工作。
#include <stdio.h>
#include <stdlib.h>
typedef struct cellule
{
int val;
struct cellule *suivant;
} cellule;
typedef struct cellule* liste;
liste insert_tete(liste L,int n)
{
liste p;
p=malloc(sizeof(cellule));
p->val=n;
p->suivant=L;
return p;
}//ok :)
liste insert_croissant(liste L,int n)
{
if(!L)
{
L=insert_tete(L,n);
return L;
}
liste p,q;
for(q=L,p=L; (p!=NULL )&&(n> (p->val)) ; q=p,p=p->suivant); //
p=insert_tete(p,n);
q->suivant=p;
return L;
}
【问题讨论】:
-
请重新格式化您的代码以使其更易于阅读。
-
insert_croissant()听起来很好吃! -
不要在 C 中强制转换 malloc 的返回值。没有理由这样做,它实际上可以隐藏您忘记包含
<stdlib.h>的事实(没有强制转换,不存在的函数暗示返回int,这将失败,但演员隐藏它)。 C 可以将void*隐式强制转换为任何其他指针类型。 -
另外,描述性变量名也不错。
-
@BrettHale,是的,它定义明确。这里的逗号是一个“逗号运算符”,每个这样的逗号运算符都定义了一个序列点。
标签: c sorting linked-list segmentation-fault