链表和结构数组之间的区别?

use*_*914 1 c++ data-structures

这些代码有什么区别?

1)

struct MyStruct
{
    int num;
} ms[2];

ms[0].num = 5;
ms[1].num = 15;
Run Code Online (Sandbox Code Playgroud)

2)

struct MyStruct
{
    int num;
    MyStruct *next;
};

MyStruct *ms = new MyStruct;
ms->num = 5;
ms->next = new MyStruct;
ms->next->num = 15;
Run Code Online (Sandbox Code Playgroud)

一般来说,我可能对链表和列表有点困惑,它们对某些特定的东西有用吗?请给我多解释一下。

lar*_*sks 5

你的第一个定义...

struct MyStruct
{
    int num;
} ms[1];
Run Code Online (Sandbox Code Playgroud)

...创建一个包含单个元素的静态分配数组。当程序运行时,您无法更改数组的大小;该数组永远不会容纳多个元素。您可以通过直接索引来访问数组中的项目;例如,假设您已经定义了适当大小的数组,ms[5]则将获得数组中的第六个元素(请记住,C 和 C++ 数组是从 0 索引的,因此第一个元素是)。ms[0]

你的第二个定义...

struct MyStruct
{
    int num;
    MyStruct *next;
};
Run Code Online (Sandbox Code Playgroud)

...创建一个动态分配的链表。该列表的内存在运行时动态分配,并且链接列表可以在程序的生命周期内增长(或缩小)。与数组不同,您不能直接访问列表中的任何元素;要到达第六个元素,您必须从第一个元素开始,然后迭代 5 次。