我正在学习数据结构的使用,并遇到了一些疑问:
struct node
{
int data;
struct node *next;
}*head;Question1:在上面的结构中,在结构中声明一个结构节点*next意味着什么?它与简单地将结构中的指针变量声明为int *next有什么不同?
Question2:我们可以看到,在结构定义的末尾,一个指针*head被声明为节点类型,并用于访问结构成员(如果我是正确的)。这和这样声明是一样的吗?
struct node *head;如果能帮上忙就太好了。先谢谢大家。
发布于 2016-01-17 02:54:22
在C中,链接列表通常是这样声明的--链接列表是包含数据的一系列节点,以及指向该系列中下一个节点的链接(在本例中是一个指针)。
因此,struct node类型的每个对象都应该包含指向另一个struct node的指针。它的特点是在结构中声明一个字段next,并使用struct node *类型。
至于第二个问题:您提供的代码都定义了struct node (允许实例化struct node类型的对象),并声明了一个指向这样一个名为head的结构的指针。您当然可以按照您所要求的方式定义变量head,但是您仍然需要在代码的早期位置定义结构。这通常是在一个单独的头文件中完成的,但为了简洁起见,可以在同一个.c源代码文件中完成。
现在,请注意,这两个方法实际上都不会创建一个struct node对象。你所做的就是声明一个指向一个指针。对象在任何地方都不存在,因为您从未为它分配空间。要做到这一点,您需要使用malloc
struct node {
int data;
struct node * next;
} * head;
head = malloc(sizeof(struct node));您还可以声明结构的运行时堆栈实例,这仅仅意味着您不需要显式地释放您用malloc()分配的内存。当您从函数返回时,或者当程序在任何函数之外声明时终止时,为结构分配的内存将被取消分配。
发布于 2016-01-17 02:52:24
"struct节点* next“声明了一个名为next的变量,该变量指向"struct节点”。换句话说,是一个单一链接的列表。
您是正确的,因为该语句做了两件事:
这些工作可以单独进行,具体如下:
struct node
{
int data;
struct node *next;
};
struct node *head;发布于 2016-01-17 02:54:07
将next声明为struct node *next意味着它指向一个struct node,可能是列表中的下一个节点。如果它被声明为int *next,那么它将指向一个int,它似乎没有任何必要。
对问题2的答复是肯定的。他们只是简单地将struct node的定义与head的声明结合起来。他们可以像你说的那样被分开。
https://stackoverflow.com/questions/34834542
复制相似问题