gpt4 book ai didi

c - 基本链表的解释?

转载 作者:行者123 更新时间:2023-11-30 19:52:45 25 4
gpt4 key购买 nike

我试图理解 C 中链表的基本示例,但我无法理解它们是如何链接在一起的。假设我有以下代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct node {
char s[50];
struct node* next;
};

struct node* addNode(struct node* head, char s[]);

int main(void)
{
struct node *head = NULL;
char* text[] = {"one", "two", "three",
"four", "five", "six"};
int i, size = sizeof(text)/sizeof(text[0]);

for(i = 0; i < size; i++)
head = addNode(head, text[i]);
}

struct node* addNode(struct node* head, char s[])
{
struct node* temp = malloc( sizeof(struct node) );
strcpy(temp->s, s);
temp->next = head;
return temp;
}

我对开头部分以及它最初如何链接到下一部分感到困惑。

  • 在 main 中创建结构节点 *head/head 有地址吗?/
  • 将字符串与 head 一起发送到 addnode/如果 head 为空,我们最初发送什么/
  • 创建信息并将其复制到临时变量
  • /如果进入 addnode 函数的头没有地址,那么 temp->next 中是什么?/
  • 返回 temp 并将其分配给 main 中的 head/*so 在第一个循环之后 *head 有一个地址,在该地址内它指向带有“one”的结构节点,但是该节点的下一个是什么? em>/

最佳答案

单链表通常是指向第一个元素(通常称为“头”)的指针。列表中的每个后续元素都链接到实际元素的下一个指针上。通常,列表的元素(包括头)被分配。

所以初始头是NULL。你有一个空列表。

添加一个元素,将 head 指向该元素,next 指向 NULL。

现在您有两个实现选项。追加或添加下一个对象。

如果追加,则将遍历链表直至末尾,并让最后一个 next-Pointer 指向新元素。在这里,您必须考虑到您正在“追加”第一个元素(头部为空)。

或者您在前面添加(如示例中所示)新元素,使其成为新头。因此 new 的 elemet next 指向旧列表(以 head 开头,即使 head 为空),新的 head 成为新元素。副作用,你颠倒了元素的顺序。

当我使用列表时,这对我来说是一个很好的可视化,在纸上绘制框(malloc)和箭头(帮助指针,如头、上一个或最后一个)并用箭头(下一个指针)连接框

关于c - 基本链表的解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25200850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com