在创建链表时,我们创建一个节点结构,它由数据和指向下一个节点的指针组成。稍后当我们创建一个将元素附加到链表上的函数时,我们创建一个临时节点来存储输入的数据。
让我们考虑以下程序 -
#include<stdio.h>
struct node
{
int data;
struct node* link;
}
struct node* root=NULL;
void main(append)
{
struct node* temp;
temp= (struct node*)malloc(sizeof(struct node))
.....
}
我的第一个问题集:
在第11行中,为什么我们需要在malloc函数之前提到(struct node*)
?
那有什么意义?
我的第二个问题集:
如果我们要创建一个双向链表,其中包含2个指针(对于下一个节点和上一个节点)的节点结构,我们是否还要初始化结构节点类型的指针(用于遍历列表)?
在这种情况下,是否有不同的方法来初始化指针?
答案 0 :(得分:1)
重要的是在你的程序中制造错误,
malloc将返回void*
,当您分配给struct somthing*
时,它会自动转换。
答案 1 :(得分:1)
答案 2 :(得分:0)
为什么我们需要提及&#39;(struct node *)&#39;在malloc函数之前, 这有什么意义?
通过在(struct node*)
函数之前编写malloc
,可以将返回值输入到指定类型。此处的演员阵容是可选的often frowned upon。
如果我们正在创建一个具有节点的双向链表 由2个指针组成的结构(......
制作双向链表时,您应该声明如下内容:
struct node {
int data;
struct node *next;
struct node *previous;
};
您可以使用malloc
功能为节点分配空间。 next
和previous
指针再次指向struct node
s。再次调用malloc
为next
元素分配空间。对于第一个节点,previous
应为NULL
,对于最后一个节点,next
应为NULL
。 Here是一种实现方式。
答案 3 :(得分:-1)
这是因为malloc的返回类型是void *。 (struct node *)是一个转换,使用它来告诉编译器你要将malloc返回的值视为指向struct node的指针。
对于双链表,您可以使用
struct node
{
int data;
struct node *next,*prev;
};
int main()
{
struct node *new_node=(struct node *)malloc(sizeof(node));
}
答案 4 :(得分:-1)
malloc返回void指针(可以在标题处检查和验证),因此在将其指定给其他类型的变量时需要进行类型转换。
请您阅读https://www.tutorialspoint.com/cprogramming/c_type_casting.htm
链接