声明链表节点
Declaring a Linked List Node
如果它太基础或愚蠢,请耐心等待,但我想知道,当我们有一个节点结构时:-
struct node {
int data ; //data
struct node* next; //pointer
}
为什么我们声明一个节点为:-
struct node* new_node = null;
或
struct node* new_node= (struct node*)malloc(sizeof(struct node));
为什么不 struct node new_node = null
?
在前两个中声明指向结构或节点的指针:
struct node* new_node;
是一个指针,或者结构体的地址
在你的建议中,你声明了一个完整的结构或节点:
struct node new_node;
这是一个将存在于堆栈中的结构。
并且您不能将 null 分配给结构,至少在这种情况下是这样。
因为node
是struct
的名字,而new_node
是变量的名字。 *
表示 new_node
只是 struct
的地址,因此您需要使用 malloc
.
为其分配内存
您可以为结构定义自己的自定义类型:
typedef struct node_struct_tag //tag, for use within the struct
{
int data ; //data
struct node_struct_tag* next; //pointer
} node, *node_pointer; //types
现在您可以使用您建议的简化语法声明新节点。
node_pointer newNode = null;
你可以这样声明一个节点,但是你需要正确地初始化它。
结构节点new_node = {5 , NULL};
将创建一个名为 new_node 的节点,数据设置为 5,next 设置为 NULL。
问题或多或少是你实际需要的。当您在函数中创建这样的节点时,如果您不复制它,该节点将在函数完成后不复存在。这通常是不可取的。
但是如果你无论如何都需要复制这样一个节点,你可以首先使用 malloc 获取 "copy" 的内存,然后在 "copy" 中填充数据只是通过指向节点的指针,而不是将节点放在函数堆栈上。
您可以像这样定义一个更具可读性的结构
typedef int Type;
typedef struct node * Ptr;
typedef struct node {
Type Element;
Ptr Next;
} Node;
一个新节点可以清晰地定义为
Ptr newNode = NULL;
或
Ptr newNode = malloc(sizeof(Node));
如果它太基础或愚蠢,请耐心等待,但我想知道,当我们有一个节点结构时:-
struct node {
int data ; //data
struct node* next; //pointer
}
为什么我们声明一个节点为:-
struct node* new_node = null;
或
struct node* new_node= (struct node*)malloc(sizeof(struct node));
为什么不 struct node new_node = null
?
在前两个中声明指向结构或节点的指针:
struct node* new_node;
是一个指针,或者结构体的地址
在你的建议中,你声明了一个完整的结构或节点:
struct node new_node;
这是一个将存在于堆栈中的结构。
并且您不能将 null 分配给结构,至少在这种情况下是这样。
因为node
是struct
的名字,而new_node
是变量的名字。 *
表示 new_node
只是 struct
的地址,因此您需要使用 malloc
.
您可以为结构定义自己的自定义类型:
typedef struct node_struct_tag //tag, for use within the struct
{
int data ; //data
struct node_struct_tag* next; //pointer
} node, *node_pointer; //types
现在您可以使用您建议的简化语法声明新节点。
node_pointer newNode = null;
你可以这样声明一个节点,但是你需要正确地初始化它。
结构节点new_node = {5 , NULL}; 将创建一个名为 new_node 的节点,数据设置为 5,next 设置为 NULL。
问题或多或少是你实际需要的。当您在函数中创建这样的节点时,如果您不复制它,该节点将在函数完成后不复存在。这通常是不可取的。
但是如果你无论如何都需要复制这样一个节点,你可以首先使用 malloc 获取 "copy" 的内存,然后在 "copy" 中填充数据只是通过指向节点的指针,而不是将节点放在函数堆栈上。
您可以像这样定义一个更具可读性的结构
typedef int Type;
typedef struct node * Ptr;
typedef struct node {
Type Element;
Ptr Next;
} Node;
一个新节点可以清晰地定义为
Ptr newNode = NULL;
或
Ptr newNode = malloc(sizeof(Node));