struct里面的struct?

时间:2017-03-13 15:54:27

标签: c pointers struct linked-list

这是我的讲师发送的示例编码的代码片段。 我不了解逻辑。请耐心等待,我正在学习计算机科学专业的学生。编辑:看起来这是一个链表。

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, 我最好的猜测是:

  • 每个结构名称(head,tail和curr)都有三个不同的" int值"和(struct data *next) - 我不明白
  • 程序以提示输入值
  • 开始
  • curr = (struct db*) malloc(sizeof(struct db)); 我不明白
  • curr的整数值设置为1
  • 如果头是NULL那么.. 我不明白
  • head = tail = curr - 我不明白。我最好的猜测是这是一个链条。
  • 将指针设置在NULL
  • 的下方
  • else将curr旁边的指针设置为头部并设置为curr

1 个答案:

答案 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