我正在开展一个学校项目,我正在尝试更好地理解双重链接列表和结构。目前,我正在尝试实现一个创建新链接列表的功能。因为我认为我可以在那里工作。
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指针,因为它是列表中唯一的项目,*数据将是我认为的输入。谁能让我知道我的代码会是什么样子?
答案 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 */
...
其他人可能会提交完整的功能,但您需要发生的英语语言描述(除了整个堆与堆栈之外的东西)。