0

構造体を使用せずに、配列だけで連結リストを作成することになっています。トムがリストの最後にあるはずであり、if ステートメントを表示する必要があることを除いて、すべてがインストラクターが望むように機能します。それしか仕事に行けない。助けてくれてありがとう。

#include<iostream>
#include<string>
using namespace std;

int main()
{
    int position[10] = {0,1,2,3,4,5,6,7,8,9};
    string names[10] = {"dick", "Harry", "Sam", "Tom"};
    int link[10] = {1, 2, 3, 99, 5, 6, 7, 8, 9, 10, };
    int stkptr = 0;

    for(int i = 0; i < 10; i++)
    {
        if(stkptr == 99)
            cout<<"You have reached the end of the list."<<endl;
        else
            stkptr = link[stkptr];
        cout << names[i] << " is in position " 
             <<position[stkptr] << " and is linked to " << names[stkptr] << endl;
    }
    return 0;
}
4

2 に答える 2

1

ブラケットが必要なelseステートメントについての誰もコメントしていませんが、elseは次の最初の行のみを実行するという事実に対処していると思います。そう、

else
    stkptr = link[stkptr];
    cout<<names[i]<<" is in position "<<position[stkptr]<<" and is linked to "<<names[stkptr]<<endl;

stkptr = link[stkptr];条件が失敗した場合にのみ実行されますが、cout は常に実行されます。

ただし、より広範な問題は、範囲外の配列インデックスに関係しています。スタック オーバーフローが発生しているため、Tom に会うことができません。ここでの問題は、あなたがカウトの前stkptrにいるように設定していることです. あなたが持っているlink[stkptr]とき:i == 3

cout<<names[3]<<" is in position "<<position[99]<<" and is linked to "<<names[99]<<endl;

プログラムを再構築して、配列検索の後に 99 に設定する必要があります。トムは誰ともリンクしていないため、トムを見ているときにstkptr全体をカウントしないように、さらにロジックを追加する必要があります。" and is linked to "...

于 2013-02-21T15:50:49.983 に答える
1

リンクが正しく設定されていません。

の 99 はlink[3]、リストに 4 番目のノードがなく、3 つだけであることを示します。

99 を最後の有効なリンクの後に移動します。

ヒント: リストは次のようになります: 0 -> 1 -> 2 -> 99、有効なノード 0、1、2 のみを表示します。

ヒント 2: ペンと紙を使って描きます。

この回答が気に入ったら、横にあるチェックマークをクリックしてください。

于 2013-02-21T16:00:39.017 に答える