1
using namespace std;

struct Package_Node
{
    int bar_code;
    float package_weight;
    struct Package_Node *next_packaged;
};

struct Key_Node
{
    int key;
    struct Package_Node *next_package;
};

Key_Node *keyMain=0;

int weightTemp=0,barcodeTemp=0,keyTemp=0,N=0,X=0,max_value=0,optionChosen=0,optionChosenTwo=0;
float tempWeight;

int main()
{
    srand(time(NULL));
    do
    {
        cout << "1 - Enter Number of keys and the Max Value\n2 - Enter Number of Packages (N)\n";
        cout << "3 - Create Array of Keys\n4 - Organize Packages\n5 - Table Stats\n6 - Clean Table\n7 - Exit\n\n";
        cin >> optionChosen;
        switch(optionChosen)
        {
        case 1://entering keys and max values
        {
            cout << "\nEnter Number of Keys: ";
            cin >>X;
            cout <<"\nEnter Max Value of the Barcode: ";
            cin >>max_value;
            break;
        }
        case 2://enter number of packages.
        {
            cout << "\nEnter Number of Packages: ";
            cin >> N;
            break;
        }
        case 3://create array of keys.
        {
            //Key_Node *keyMain = new Key_Node[X];
            keyMain= new Key_Node[X];
            for(int i=0;i<X;i++)
            {
                keyMain[i].key=i;
                cout << keyMain[i].key<<endl;
            }

            break;
        }
        case 4:
        {


                for(int i=0;i<N;i++)
                {
                    barcodeTemp = rand() % max_value + 1;

                    keyTemp = barcodeTemp % X;

                    tempWeight = rand() % 500 + 1;

                    keyMain[keyTemp] = new Package_Node;

                    Package_Node->bar_code=barcodeTemp;
                    Package_Node->package_weight=tempWeight;
                    Package_Node->next_packaged=NULL;

                }
                for(int i=0;i<N;i++)
                {
                    cout << totalPackages[i].bar_code <<endl;
                    cout << totalPackages[i].package_weight << endl;
                }



                cout << keyTemp;
            break;
        }
        case 5:
        {
            break;
        }
        case 6:
        {
            break;
        }
        default:
        {
            break;
        }
        }
    }while(optionChosen!=7);
}

私はここでちょっと混乱しています。keyMain静的配列です。keyMain[1]などは、keyMain[2]を使用して作成されたリンクリストを指しPackage_Nodeます。が追加されるkeyMain場所のインデックスは、によって決定されます。しかし、それは遠い叫びのようです。私が書いたコードが機能していないようです。私はここで何が間違っているのですか?何か案は?これはクラスプロジェクト用であり、ベクトルについてはまったく説明しませんので、ベクトルは使用しないでください。new package_nodekeyTemp

4

2 に答える 2

0

あなたのコードでは、これを試みます:

keyMain[keyTemp] = new Package_Node;

Package_Node->bar_code=barcodeTemp;
Package_Node->package_weight=tempWeight;
Package_Node->next_packaged=NULL;

それはうまくいきません。これが基本的な考え方です:

Package_Node *n = new Package_Node;
n->bar_code = barcodeTemp;
n->package_weight = tempWeight;
n->next_packaged = NULL;
keyMain[keyTemp].next_package = n;

Key_Nodeこれで、配列内の各項目に単一要素のリストができました。これらのリストに追加する場合は、通常のリスト ベースのアルゴリズムが適用されます。

しかし、これをハッシュ配列として使用しようとしているようです。つまり、リストに追加 (または先頭に追加) する必要があります。先頭に追加すると、コードが読みやすくなります。追加したい場合は、それを練習してください。

// Do this instead of setting it to NULL (from previous code example)
n->next_packaged = keyMain[keyTemp].next_package;

上記の例では、配列next_packageを作成するときに NULL に初期化する必要があります。keyMain現在、これは行っていません。これは C++ であるため、 RAIIに慣れておくことをお勧めします。

最後に、次のコードは意味がありません。

for(int i=0;i<N;i++)
{
    cout << totalPackages[i].bar_code <<endl;
    cout << totalPackages[i].package_weight << endl;
}

あなたがする必要があるのは(あなたがどこかに配列を保存していない限りtotalPackages)あなたの配列を繰り返し処理し、keyMainすべてのリストを出力することです:

for(int i=0;i<X;i++)
{
    Package_Node *p = keyMain[i].next_package;
    while( p != NULL ) {
        cout << p->bar_code << endl;
        cout << p->package_weight << endl;
        p = p->next_packaged;
    }
}
于 2013-03-11T01:06:20.580 に答える
0

このセクションは正しくありません

keyMain[keyTemp] = new Package_Node;
Package_Node->bar_code=barcodeTemp;
Package_Node->package_weight=tempWeight;
Package_Node->next_packaged=NULL;

それは次のようなものでなければなりません

keyMain[keyTemp].next_package = new Package_Node;
keyMain[keyTemp].next_package->bar_code=barcodeTemp;
keyMain[keyTemp].next_package->package_weight=tempWeight;
keyMain[keyTemp].next_package->next_packaged=NULL;

また、keyTempを計算する方法

barcodeTemp = rand() % max_value + 1;    
keyTemp = barcodeTemp % X;

max_value に入力した内容によっては、配列のサイズである X よりも大きくなる可能性があるため、正しくないようです。

于 2013-03-11T01:09:15.040 に答える