链接列表和结构

时间:2013-05-15 20:54:51

标签: c list linked-list malloc

我正在开展一个学校项目,我正在尝试更好地理解双重链接列表和结构。目前,我正在尝试实现一个创建新链接列表的功能。因为我认为我可以在那里工作。

typedef struct ListItem {
    struct ListItem *previousItem; //pointer to previous item, NULL if first list item
    struct ListItem *nextItem;     //pointer to next item, NULL if first list item
    void *data;                    //pointer to data

这是我想要制作的双向链表的结构。我知道“void *”可以包含指向任何内容的指针,我还必须分配存储在列表项中的任何数据。

/**
 * This function starts a new linked list. Given an allocated pointer to data it will    return a
 * pointer for a malloc()ed ListItem struct. If malloc() fails for any reason, then this function
 * returns NULL otherwise it should return a pointer to this new list item. data can be NULL.
 *
 * @param data The data to be stored in the first ListItem in this new list. Can be any valid 
 *             pointer value.
  * @return A pointer to the malloc()'d ListItem. May be NULL if an error occured.
 */

ListItem *NewList(void *data);

我知道malloc()在堆栈上分配足够的内存供我们使用,所以我认为在我的函数中我必须使用malloc()* previousItem,* nextItem和* data(这将是6个字节?)除了那么,为了实现这个功能,我要做的就是复制ListItem结构?前一个AND下一个项目将是NULL指针,因为它是列表中唯一的项目,*数据将是我认为的输入。谁能让我知道我的代码会是什么样子?

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。您可以使用6来获取需要分配的内存量,而不是使用malloc作为sizeof的参数,例如:

ListItem *node = malloc(sizeof(ListItem));

之后,实施非常简单:

/* Make sure that allocation succeeded */
...
/* Assign the right values to previousItem and nextItem */
...
/* Assign the right value to data */
...
/* Return the pointer to the new list */
...

其他人可能会提交完整的功能,但您需要发生的英语语言描述(除了整个堆与堆栈之外的东西)。