-1

我有一个字符串数组,我应该用它来创建一个链表。问题是我只能使用数组。我查找的所有内容都说使用结构和节点,我不确定从这里去哪里。我知道我的代码不正确,每个指针都指向数组的一个元素,因此它们并没有真正链接。如果有人能指出我正确的方向,那就太棒了

这是我到目前为止所拥有的

#include <iostream>
#include <string>

using namespace std;


int main ()
{
string names [4] = {"Dick", "Harry", "Sam", "Tom", " "};
string *nameptr[4];

for(int x = 0; x < 4; x++)
{
    nameptr[x] = &names[x];
    cout << *nameptr[x] << " is at position " << x << " and points to ";
    cout << &nameptr[x] << endl;
}
return 0;

}
4

3 回答 3

2

以下是 C++ 中链表的教程:

http://www.dreamincode.net/forums/topic/31357-c-linked-lists-custom-linked-lists-part-1/

您应该先搜索并尝试一下,然后当您向这里的人询问时,将能够更好地帮助您解决您的问题。事实上,也读过这个:

http://mattgemmell.com/2008/12/08/what-have-you-tried/

于 2013-02-18T04:12:39.900 回答
2

实际上如果使用数组,你只需要一个指向第一个元素的指针,你可以通过指针算法访问数组的其余部分。

但是,如果您想要一个真正的链接列表。那么你可以做这样的事情:

struct mydata{
    std::string data;
    struct mydata* next;
}

mydata names[4] = {{"Dick",NULL}, {"Harry",NULL}, {"Sam",NULL}, {"Tom",NULL}, {" ",NULL}};
//here you establish the link
names[0].next = &names[1];
names[1].next = &names[2];
names[2].next = &names[3];
names[3].next = &names[4];
//here is the pointer to the head;
mydata* nameptr = names;

while(nameptr)
{
    cout << nameptr->data;
    nameptr = nameptr->next;
}
于 2013-02-18T04:19:48.450 回答
0

“我只能使用数组”是什么意思?您只知道如何使用数组,或者您仅限于使用数组,或者??

您查找了一些告诉您使用结构的东西 - 您尝试过这样做吗?它不在您的代码中。

与您的实际问题无关,但您已经声明了一个包含 4 个字符串 ( string names [4]) 的数组,然后您尝试使用 5 个项目初始化该数组。

我的建议与您所看到的类似:使用结构,我还要补充一点,您还需要使用堆(malloc在 c 中,new在 c++ 中)。该结构将需要一个指向下一个列表元素的链接指针,以及存储数据本身的位置,在这种情况下可能只是一个char指针。

于 2013-02-18T04:13:46.280 回答