【问题标题】:Function not adding element to doubly linked list函数不向双向链表添加元素
【发布时间】:2014-10-27 00:28:42
【问题描述】:

我一直在用 C 语言编写一个双向链表,即使在列表后面插入元素的函数对我来说似乎是正确的,但没有添加元素。调试显示这些值已分配给相应的 Pacijent 实例,但是列表的 frontback 仍然是NULL

代码如下:

struct Pacijent
{
    char ime[10];
    [...]
    Pacijent *prev;
    Pacijent *next;
};

Pacijent noviPacijent(char i[], char p[], char io[], int jmb[], double v, double t, int s)
{
    Pacijent *novi = (Pacijent*)malloc(sizeof(Pacijent));
    memcpy(novi->ime, i, strlen(i)+1);
    [...]
    return *novi;
}

struct Lista
{
    Pacijent *front;
    Pacijent *back;
};

void assign(Pacijent p1, Pacijent p2)
{
    memcpy(p1.ime, p2.ime, strlen(p1.ime)+1);
    [...]
}

void insertBack(Pacijent p, Lista l)
{
    Pacijent *novi = (Pacijent*)malloc(sizeof(Pacijent));
    assign(*novi, p);
    if (l.back == NULL)
    {
        l.front = l.back = novi;
        novi->prev = NULL;
        novi->next = NULL;
    }
    else
    {
        novi->prev = l.back;
        l.back->next = novi;
        novi->next = NULL;
        l.back = novi;
    }
}

int main()
{
    Lista *lista = (Lista*)malloc(sizeof(Lista));
    lista->back = lista->front = NULL;

    int jmb2[13] = { 1, 2, 0, 1, 9, 9, 3, 0, 0, 0, 0, 0, 0 };
    [...]
    Pacijent p2 = noviPacijent("Mladen", "Markovic", "Milan", jmb2, 1.85, 75, 21);

    insertBack(p2, *lista);
}

【问题讨论】:

    标签: c doubly-linked-list


    【解决方案1】:

    看看:

    void insertBack(Pacijent p, Lista l)
    

    此函数将 Lista 值作为参数,而不是 Lista 指针。这意味着如果您更改任何关于 l 的内容,它不会在函数之外产生影响。当您调用insertBack 时,您实际上是在复制您的列表,然后将一个元素添加到临时列表中。

    编辑: 您的 assign 函数也会发生同样的情况,您对 p1 所做的更改不会在函数之外产生任何影响,因为您将其作为值而不是指针传递。

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      相关资源
      最近更新 更多