链接列表基础知识混乱

时间:2016-02-03 05:26:03

标签: c++ linked-list

我正在浏览链表,我感到很困惑。也许我正在混合这个概念或其他东西。以下是创建标题节点的代码。

struct node
{
   int data;
   struct node *link;
};
node *head;
void main()
{
   head = new node;
}

1)我想知道的第一件事是如何在同一节点结构中编写struct node *link;?因为首先使用节点结构,然后我们可以声明指针。
2)node *head;已经声明了一个大小节点的内存,那么我们需要再做一次head = new node;

2 个答案:

答案 0 :(得分:1)

self referential struct可以包含指向自身的指针。请不要与指针大小混淆结构大小。无论数据类型如何,指针的大小都是恒定的。

struct node
{
    int data;
    struct node *link;
};

如果struct node *link成为struct node link之类的东西,它就不会像你想象的那样编译。

关于为什么需要使用new进行分配,当我们执行node *head时,它会说head指向具有data区域的实际节点的内存位置link

再次阅读pointer概念可能会有用

答案 1 :(得分:0)

链接列表是一系列对象。你在这里做的是创建一个包含两个变量的结构。一个是存储在此节点中的日期。另一个是递归结构。这是链接列表获取其名称的位置。一个结构链接到下一个。创建此节点时,链接没有值,但您可以通过创建新节点并将其存储在链接中来添加节点。

至于你的其他代码,我不认为你做得对。通常,节点包含在链接列表类中,以便您可以通过添加,删除和搜索节点来控制链接列表。当您控制链接列表时,至少需要两个指针。一个指向列表中的第一个节点(也称为" head")。第二个指针是搜索指针,它将从头开始逐个节点地移动,直到找到您要查找的内容。

现在,当你写node* head来回答你的第二个问题时,你只是在宣告指针。你没有声明"大小节点的记忆"所以在链接列表的初始化函数中,您需要创建第一个节点并使其指向它head = new node;