-1

リンクされたリストを作成することになっている文字列の配列があります。問題は、配列しか使用できないことです。私が調べたものはすべて、構造体とノードを使用するように言われていますが、ここからどこに行くべきかわかりません。私は自分のコードが正しくないことを知っています.配列の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 つの項目で初期化しようとしています。

私のアドバイスは、あなたが見たものと似ています: 構造体を使用してください。ヒープも使用する必要があることを追加します ( mallocc ではnew​​、c++ で)。この構造には、次のリスト要素へのリンク ポインターと、データ自体を格納する場所 (この場合はおそらく単なるcharポインター) が必要です。

于 2013-02-18T04:13:46.280 に答える