1

我试着问我的问题,但我似乎没有正确地问它,我已经被困了 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

2 回答 2

4

->运算符是简写。

没有->运算符,你会写

(*var).prop;

使用->运算符,您可以编写:

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){

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

于 2015-02-27T06:38:58.403 回答
0

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

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

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

于 2015-02-27T06:47:05.643 回答