如何在main中使用指针数组?

时间:2015-02-27 06:34:19

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

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

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

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

在我使用的主要链接这些 - >分配值

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

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

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

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

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

这不适用于将数据放入数组中,但它可以用于输入数字。

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;
}

请帮帮我。

2 个答案:

答案 0 :(得分: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){

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

答案 1 :(得分:0)

初看起来的代码似乎没问题。指针数组就是这样一个元素数组,每个元素都是一个指针,你可以使用它与代码显示的语法完全一致。

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

你确定你的问题出在那个部分吗?通常使用C ++,错误并不会在它完成的时候出现,但很久以后就会出现。这是因为&#34;未定义的行为&#34;语言规则(又名&#34;程序员从不犯错误&#34;)。