排序双向链表和插入值

时间:2016-08-25 20:06:54

标签: c linked-list

我正在尝试使用函数inserer()创建一个已排序的双向链表,以便将值插入其中。

我按如下方式编写整个程序:

#include <stdio.h>
#include <stdlib.h>

typedef struct bi{
    int val;
    struct bi *prec;
    struct bi *suiv;
}bil;

void inserer (int v, bil *tete)
{
    bil *cour, *elt;

    cour = tete->suiv;

    while (cour != tete && cour->val < v)
        cour = cour->suiv;
    elt = (bil*) malloc(sizeof(bil));
    if (elt)
    {
        elt->val = v;

        (cour->prec)->suiv = elt;
        elt->suiv = cour;
        elt->prec = cour->prec;
        cour->prec = elt;
    }
}

int main()
{
    bil* tete;

    /*Creation tete fictif*/
    tete = (bil*) malloc (sizeof(bil));


    tete->prec = tete;
    tete->prec = tete;

    inserer (3,tete);
    return 0;
} 

然后我尝试使用该函数并插入一个值(示例中为3) 与inserer (3,tete);但它不断给出分段错误。 帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

tete->suiv

中未初始化使用
cour = tete->suiv;

更改

tete->prec = tete;
tete->prec = tete;

tete->prec = tete;
tete->suiv = tete;

答案 1 :(得分:3)

由于cour = tete->suiv;

,您的分段错误

最初两个指针都应分配给tete

cour->suiv = tete;
cour->suiv = tete;

答案 2 :(得分:0)

您永远不会将tete->suiv设置为任何内容。在main你可能意味着

tete->prec = tete;
tete->suiv = tete;