【问题标题】:How do I use an array of pointers in main?如何在 main 中使用指针数组?
【发布时间】:2015-02-27 06:34:19
【问题描述】:

我试着问我的问题,但我似乎没有正确地问它,而且我已经被困 2 个月了。 (很伤心)

仅供参考:我从节点构建了一个链表:

struct node  {
int number;
node *next;  }; 

在我使用的 main 中链接这些 -> 分配值

void insertAsFirstElement(node *&head, node *&tail, int number){
node *temp = new node; 
temp->number = number;
temp->next = NULL; 
head = temp;
tail = temp; }

现在我正在尝试创建一个跳过列表,它应该与我的原始节点具有相同的结构,除了 node* next 应该是节点类型的指针数组。

struct node {
int number;
node *next[3];
};

我对如何拥有一个节点指针数组感到困惑。我注意到它们往往看起来像这样: node **next 然后声明动态分配内存。我只希望我的数组大小为 4。所以 [3]。

我的问题是如何使用 main() 中的节点指针数组创建新节点并将某些内容放入节点数组的第一个插槽中?

这不适用于将事物放入数组中,但可以用于放入数字。

void insertAsFirstElement(node *&head, node *&tail, int number){

node *temp = new node; 
temp->number = number;
cout<<temp->number<<endl;
temp->next[0] = tail; 
cout<<temp->next[0]<<endl;
head->next[0] = temp;
cout<<head->next[0]<<endl;
}

请帮助我。

【问题讨论】:

  • "这不起作用";你有语法/编译器错误吗?还是行为错误/段错误?
  • 简短评论:4 个 big 的数组分配为 node* next[4]。索引第 4 个元素是 mynode-&gt;next[3]

标签: c++ arrays pointers linked-list skip-lists


【解决方案1】:

-&gt; 运算符是一种简写形式。

没有-&gt; 操作符,你会写

(*var).prop;

使用-&gt; 运算符,您可以编写:

var->prop;

因此,要将节点存储在列表的第一个位置,您可以编写:

void StoreNode(node *node){
    node *temp = new node;
    temp->next[0]=node;
}

要从列表中的节点检索数据,您可以这样写:

temp->next[0]->number

和写一样

(*temp).next[0]->number

和写一样

( *((*temp).next[0]) ).number

您的这行代码似乎有点混乱:

void insertAsFirstElement(node *&head, node *&tail, int number){

请记住,您只是将节点的地址传递给您的函数。因此,您只需要

void insertAsFirstElement(node *head, node *tail, int number){

在函数本身内部,您必须在列表中找到正确的位置,即当您进入 ** 符号时。

【讨论】:

    【解决方案2】:

    乍一看,代码似乎没问题。指针数组就是这样,一个元素数组,其中每个元素都是一个指针,您可以完全按照代码显示的语法使用它。

    但是请注意,在类中声明指针数组时,元素不会自动初始化,因此您可能希望将尚未使用的元素修复为 NULL。此外,在跳过列表中,您可能需要知道节点已插入到哪个“级别”。

    你确定你的问题出在那个部分吗?在 C++ 中,错误通常不会在它完成的时候出现,而是在很久以后才出现。发生这种情况是因为语言的“未定义行为”规则(也就是“程序员从不犯错误”)。

    【讨论】:

    • 我打算将数组用作“级别”,因为我认为您可以控制进入数组的元素的位置?所以在级别 0 将是所有元素。在插入期间,另一个指针可能存储在级别 1,从头节点创建一个新级别。我想我现在需要回去研究数组了。
    • @user2899211:这取决于您希望跳过列表支持什么。但是给定一个元素,你怎么知道使用的唯一指针是 0 还是也使用了 1?数组不知道其中“有效”元素的数量;它只是有一个固定的预定大小。如果您需要一个可以动态调整大小的数组,您可能需要寻找std::vector
    • 好点。本质上,我将从头节点数组 [3] 开始搜索以查看它是否有指针并向下移动直到遇到指针。这是一个很大的浪费。现在我只需要创建任何东西,然后在我有更好的理解后返回。添加动态关卡是理想的,但我还不能编写代码。
    猜你喜欢
    • 2020-02-08
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2015-03-19
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    相关资源
    最近更新 更多