0

我正在做一个学校项目,我试图更好地理解双向链表和结构。目前,我正在尝试实现一个函数,一个创建新链表的函数。因为我认为我可以从那里工作。

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 结构?上一个和下一个项目将是 NULL 指针,因为它是列表中的唯一项目,而 *data 将是我认为的输入。谁能告诉我我的代码是什么样的?

4

1 回答 1

2

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

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 */
...

其他人可能会提交完整的功能,但是您对需要发生的事情的英语描述是正确的(除了整个堆与堆栈的事情)。

于 2013-05-15T20:59:52.350 回答