【问题标题】:Struct inside a struct? [closed]结构内部的结构? [关闭]
【发布时间】:2017-03-13 15:54:27
【问题描述】:

这是我的讲师发送的示例编码的代码 sn-p。 我不知道逻辑。请耐心等待,我目前正在学习计算机科学专业的学生。编辑:这似乎是一个链表。

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
  • 如果 head 是NULL 那么.. 我不明白
  • head = tail = curr - 我不明白。我最好的猜测是这是一条链条。
  • 将头上的下一个指针设置为NULL
  • else 将 curr 上的 next 指针设置为 head 并将 head 设置为 curr

【问题讨论】:

  • 那么你的问题到底是什么?
  • 附带一点 - 研究为什么不应该转换分配的结果。我知道这来自你的讲师,但他/她这样做是错误的。
  • @ChrisTurner 解释正在发生的事情。
  • 问题太宽泛了,显然有多个概念你不明白。从阅读你的笔记/教科书开始。如果您仍然有任何问题,请返回直接问题。例如: curr = (struct db*) malloc(sizeof(struct db)); [说实话,我不知道这条线是做什么的。这对我来说没有任何意义。] - 这本身就是一个问题。
  • 这是一个写得很糟糕的堆栈数据结构的链表实现。列表中的每个节点(struct db 的一个实例)代表堆栈上的一个条目。 value 成员存储与节点关联的值,而 next 成员显式指向列表中的下一个元素。每次调用pushF,都会用malloc动态分配一个新的struct db对象,并将输入值写入value成员。这个新节点成为列表的头部(栈顶)。

标签: c pointers struct linked-list


【解决方案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->value 设置为 1。

如果 head 是 NULL ... head = tail = curr

如果列表为空,则将 head 和 tail 设置为列表中的唯一节点。

将头上的下一个指针设置为NULL

这样做不是很好,最好设置curr->next == NULL,这样更容易理解。

curr 上的next 指针设置为head 并将head 设置为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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多