我试图在C中创建堆栈/链接列表实现。我在堆栈的pop
功能上挣扎。
这是我的堆栈/链接列表实现的样子:
// a cell
struct cell_s
{
void *elem;
struct cell_s *next;
};
typedef struct cell_s cell_t;
// the list is a pointer to the first cell
struct linkedlist_s
{
struct cell_s *head;
int len;
};
typedef struct linkedlist_s linkedlist_t;
这是pop功能:
/**
* Pop remove and return the head
*/
cell_t *pop(linkedlist_t *list)
{
if ((*list).len == 0) {
// we cannot pop an empty list
return NULL;
}
else
{
cell_t* tmp = (*list).head;
(*list).head = (*list).head.next; // <-- error occurs here
(*tmp).next = NULL;
return tmp;
}
}
我不明白我做错了什么。 (*list).head
是struct cell_s
,因此我应该能够访问属性next
?但编译器不允许我这样做。
感谢。
答案 0 :(得分:3)
head
字段不是struct cell_s
。它是struct cell_s *
,即指向struct cell_s
的指针。因此,您需要使用->
运算符取消引用并访问该成员。
list->head = list->head->next;
另请注意,ptr->field
比(*ptr).field
更容易阅读。