c++ - 在 C++ 中,如何在静态数组的末尾添加链表?

标签 c++ linked-list

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。将添加 new package_nodekeyMain 的索引由 keyTemp 确定。但这似乎相去甚远。好像我写的代码不工作。我在这里做错了什么?有任何想法吗?请不要使用 vector ,因为这是一个类项目,我们根本不会谈论 vector 。

最佳答案

在您的代码中,您尝试这样做:

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;

在上面的示例中,您必须在创建 keyMain 数组时将 next_package 初始化为 NULL。目前你不这样做。由于这是 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;
    }
}

关于c++ - 在 C++ 中,如何在静态数组的末尾添加链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15329486/

相关文章:

java - LinkedList Array 中每个索引的 LinkedList

c++ - 如何将十六进制存储在数组中? C++ 多线程

C++指针返回结构实现: Linked List

C++ 对列表中的自定义对象进行排序

c++ - 只读取文本文件中的给定行?

用另一个链表中的 "divisible by 3"数字创建一个链表的 C 函数

java - 如何获取从最后一个元素开始的前向迭代器

c++ - 在 C++ 中插入链表的尾部无法正常工作

c++ - Windows 8 任务管理器虚拟化选项

c++ - 将函数分配给变量