longitude,latitude,altitude
我不明白struct node
{
int data;
struct node *next;
}*start;
的作用,我知道它指的是下一个变量的地址;但是如何实施? struct node *next
与node *next
相似吗?
struct node *next
与*start
类似的是什么?
我发现很难理解链接列表的实现。
答案 0 :(得分:3)
我不明白
struct node *next
的作用,我知道它指的是下一个变量的地址; ...
这是正确的。
......但是如何实施?
实现几乎就是您描述行为的方式:指针实现为一个对象,其值是指向对象的内存地址。
node *next
是否与struct node *next
相似?
不仅相似,而且非常相同。†
*start
与struct node *start
类似的是什么?
struct node *start
。请参阅完整声明:
struct node /* structure definition */ *start;
它是变量的组合声明,以及结构的定义。
†struct
关键字仅用于消除以下标识符在结构标记的名称空间††中的歧义。在您的情况下,它是多余的,因为没有非结构标识符Node
来消除歧义,而在C ++中,结构标记也是类型名称。
您可能正在查看的是C代码,其中名称空间††说明符对于结构标记是必需的。
††在这个上下文中,我指的是C名称空格,而不是C ++名称空间。
答案 1 :(得分:2)
*start
与struct node *start
类似的是什么?
如果定义一个结构并在其后面添加一个名称,则声明该结构的变量。
在这里,您声明start
变量,其类型为node*
(指向节点的指针)。因此,名为start
的变量是您的第一个节点。
我不明白
struct node *next
的作用,我知道它指的是下一个变量的地址;但是如何实施?
您的列表包含您之前所说的data as int
和address of the next
节点。
在该列表的实现中,您将为每个新节点分配内存,并将该节点的地址放入结构的next
成员中。为了更好地理解链接列表,我会看here。
因此我建议编写插入,删除等功能
如果使用列表,则面向对象可能会有所帮助。但是要花时间去理解越来越复杂的代码。
答案 2 :(得分:1)
节点需要指向下一个节点。所以它有一个名为next
的指针变量。由于next也是一个节点结构,因此将其声明为struct node *next;
。 start
是您的第一个节点。
答案 3 :(得分:1)
您的代码看起来真的像C片段,而不是C ++代码。在C ++中,您可能永远不会编写自己的列表实现,而是使用std::list
或std::forward_list
。如果你这样做,它看起来像
class list
{
struct node
{
type data; // type could be a template parameter
node*next=nullptr; // set next to null by default
};
node*head=nullptr; // list is empty by default
public:
/* ... */
};
特别是,struct
中的struct node*next;
关键字不是必需的,为了清楚起见,start
指针可以在单独的行中声明。