C 结构中的结构?
这是我的讲师发送的示例代码的代码片段。 我不懂逻辑。请容忍我,我现在正在学习计算机科学。编辑:这似乎是一个链接列表C 结构中的结构?,c,pointers,struct,linked-list,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); cu
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))代码>我不明白
- 将
的整数值设置为1curr
- 如果磁头为空,则我不明白
-我不明白。我猜这是一条链子head=tail=curr
- 将头部旁边的指针设置为
NULL
- 否则,将
旁边的指针设置为head,并将head设置为curr
curr
next
声明为指向struct db
的指针
每个结构名称(head、tail和curr)都有三个不同的“int值”和(structdata*next
)
代码创建了指向struct、head(指向列表第一个节点的指针)、curr(当前节点)、tail(指向列表最后一个节点的指针)的3个“实例”指针
curr=(struct db*)malloc(sizeof(struct db))
为一个节点分配内存空间
将curr
的整数值设置为1
它将curr->value设置为1
如果磁头为NULL
。。。头=尾=电流
如果列表为空,则会将head和tail设置为列表中唯一的节点
将头部旁边的指针设置为NULL
这不是一个好方法,最好设置curr->next==NULL,以便更容易理解
将curr
旁边的指针设置为head,并将head设置为curr
这样做是为了将当前节点插入列表的开头。假设列表以一个节点A
开始,则您有:
head -> A
A -> NULL (A.next = NULL)
tail -> A
head -> B
B -> A (B.next = &A)
A -> NULL (A.next = NULL)
tail -> A
然后假设您插入了节点B,在此之后您有:
head -> A
A -> NULL (A.next = NULL)
tail -> A
head -> B
B -> A (B.next = &A)
A -> NULL (A.next = NULL)
tail -> A
那么,你的问题到底是什么呢?作为一个补充——研究一下为什么你不应该公布分配结果。我知道这是你的讲师说的,但他/她这样做是错误的。@ChrisTurner对正在发生的事情进行了解释。问题太广泛了,显然有许多概念你不理解。从阅读笔记/课本开始。如果你还有问题,请带着有针对性的问题回来。例如:curr=(structdb*)malloc(sizeof(structdb));[老实说,我不知道这行是做什么的。它对我来说毫无意义。]-这本身就是个问题。这是堆栈数据结构的一个写得很糟糕的链表实现。列表中的每个节点(struct db的一个实例)表示堆栈上的一个条目。
value
成员存储与节点关联的值,而next
成员显式指向列表中的下一个元素。每次调用pushF
,都会使用malloc
动态分配一个新的struct db
对象,并将输入值写入value
成员。这个新节点成为列表的头部(堆栈的顶部)。