这是我的讲师发送的示例编码的代码片段。 我不了解逻辑。请耐心等待,我正在学习计算机科学专业的学生。编辑:看起来这是一个链表。
struct db {
int value;
struct db *next;
} *head, *tail, *curr;
void pushF()
{
int input;
system("CLS");
printf("\n\n\tInput value: ");
scanf("%d", &input);
curr = (struct db*) malloc(sizeof(struct db));
curr->value = input;
if (head == NULL) {
head = tail = curr;
head->next = NULL;
} else {
curr->next = head;
head = curr;
}
}
如果输入为1, 我最好的猜测是:
struct data *next
) - 我不明白 curr = (struct db*) malloc(sizeof(struct db));
我不明白 curr
的整数值设置为1 NULL
那么.. 我不明白 head = tail = curr
- 我不明白。我最好的猜测是这是一个链条。NULL
。curr
旁边的指针设置为头部并设置为curr
。答案 0 :(得分:1)
这不是结构中结构的示例。相反,struct db * next只是声明结构成员next
是指向struct db
的指针。
每个结构名称(head,tail和curr)都有三个不同的“int value”和(
struct data *next
)
代码创建3个“实例”指针,指向struct,head(指向列表第一个节点的指针),curr(当前节点),tail(指向列表最后一个节点的指针)。
curr =(struct db *)malloc(sizeof(struct db));
为一个节点分配内存空间。
将
curr
的整数值设置为1
将curr->值设置为1。
如果head是
NULL
... head = tail = curr
如果列表为空,则将head和tail设置为列表中唯一的节点。
将指针设置在头部的
NULL
。
这不是一个好方法,最好设置curr-> next == NULL,以便更容易理解。
将
curr
旁边的指针设置为头部并将头部设置为curr
。
这样做是为了将当前节点插入列表的开头。假设列表以一个节点A
开始,然后你有:
head -> A
A -> NULL (A.next = NULL)
tail -> A
然后假设您插入节点B,之后您有:
head -> B
B -> A (B.next = &A)
A -> NULL (A.next = NULL)
tail -> A