将元素添加到包含自定义数据类型的简单链接列表中

时间:2014-03-22 20:07:19

标签: c linked-list

我开始滥用这个网站,但很难找到我的问题的例子(一切都与课程有关,我不能在这个项目中使用它)。< / p>

我必须模拟动态矢量,所以我认为简单的链接列表是一个很好的方法。

typedef struct OList{
    Offer element;
    struct OList *next;
}OList;

优惠是

typedef struct{
    int id;
    char destination[32];
    char type[32];
    int price;
}Offer;

我试图在列表的开头添加元素

OList insertElement(OList *start, Offer of)
{
    OList *temp = (OList*)malloc(sizeof(OList));
    temp->element = of;
    temp->next = start;
    start = temp;
    return *start; 
}

我在哪里打电话:

OList *start = (OList*)malloc(sizeof(OList));
start->next = NULL;
start = insertElement(start, of);

我认为我应该返回第一个元素,因为我使用我添加的每个元素更改它,但是我收到以下错误:

  分配到类型&#39; struct OList *&#39;时,

不兼容的类型从类型   &#39; OList&#39; start = insertElement(start,of);

我得出了这个结论,因为如果我没有返回它并且我试图通过列表,我只能访问我最初声明的元素。

我是放弃了,但与此同时我真的很想理解这一点。

1 个答案:

答案 0 :(得分:1)

好吧,insertElement返回OListstart类型为OList *

你可能想要这个:

OList *insertElement(OList *start, Offer of)
{
    OList *temp = (OList*)malloc(sizeof(OList));
    temp->element = of;
    temp->next = start;
    return temp;
}

此外,OList是一个结构,结构可能很重,而OList *占用int的内存量相同。所以不要吹你的堆栈 - 传递指针而不是结构!