如何将链表链接到 C++ 中的静态数组?

Posted

技术标签:

【中文标题】如何将链表链接到 C++ 中的静态数组?【英文标题】:How to link a linked list to a static array in C++? 【发布时间】:2013-03-03 18:56:55 【问题描述】:

考虑:

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

    struct Key_Node
    
        int key;
        struct Package_Node *next_package;
    ;

    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:
                
                    cout << "\nEnter Number of Keys:";
                    cin >>X;
                    cout <<"\nEnter Max Value of the Barcode: ";
                    cin >>max_value;
                    break;
                

                case 2:
                
                    cout << "\nEnter Number of Packages: ";
                    cin >> N;
                    //keyTemp=
                    break;
                

                case 3:
                
                    Key_Node keyMain[X];
                    for(int i=0;i<X;i++)
                    
                        keyMain[i].key=i;
                        //cout << keyMain[i].key; //to see key values.
                    
                    break;
                

                case 4:
                
                    Package_Node totalPackages[N];
                    for(int i=0;i<N;i++)
                    
                        barcodeTemp = rand() % max_value + 1;
                        keyTemp = barcodeTemp % X;
                        tempWeight = rand() % 500 + 1;
                        totalPackages[i].bar_code=barcodeTemp;
                        totalPackages[i].package_weight=tempWeight;

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

这是我的代码。我试图将总包[i](动态数组)的信息链接到 keyMain(Package_Node 数据类型和静态数组)。但是我完全迷失了这里该怎么做。

另外,我对动态数组“totalPackages”的声明是否正确?还是我不应该声明它的大小,因为它会根据用户输入的包裹总数而增长? totalPackages 应该是一个随着程序的需要而增长的链表。

【问题讨论】:

这段代码没有接近编译,更不用说正确运行(甚至不正确)。缺少变量声明 (totalPackages)、不完整的 main()(和 caseswitchdo-while)。请提供一个SSCCE 来放大您的问题。 @WhozCraig 我添加了 totalPackages 声明,该声明在发布时显然已被删除。其他部分稍后再做,我想弄清楚如何指向 struct key_node keyMain 的 next_package 指针会指向 totalPackages[some number] 指针? 仍然无法编译,而且 C++ 不支持 VLA(可变长度数组)声明。您的实现可能允许这样做,但它是非标准的。使用std::vector&lt;Package_Node&gt; 会更接近便携。即使那样,如果您应该使用问题中所述的链表,我看不出您如何得出结论,静态数组对于正在解决的任何问题都是可以接受的。 【参考方案1】:

在 C++ 中,在大括号 之间声明的变量是局部变量:当在大括号外运行代码时,它们“不再存在”。

您的代码如下所示:

        case 3:
        
            Key_Node keyMain[X];
        
        case 4:
        
            Package_Node totalPackages[N];
        

不可能在另一部分声明代码访问的一部分。要修复,请在 main 函数的开头声明内容:

int main()

    Key_Node keyMain[X];
    Package_Node totalPackages[N];
    ...

现在声明很糟糕,因为它们在用户提供值 XN 之前就已经出现了。要解决此问题,请将数组替换为 std::vector:

int main()

    std::vector<Key_Node> keyMain;
    std::vector<Package_Node> totalPackages;
    ...

您需要学习使用std::vectorsee the documentation,尤其是push_backsize)。另外看std::list的文档;它也可能对你有帮助。

【讨论】:

以上是关于如何将链表链接到 C++ 中的静态数组?的主要内容,如果未能解决你的问题,请参考以下文章

我有 2 个预填充的表链接到我的用户表,我该如何使用这些数据?

如何在 C++ 中使用静态变量在不同的类之间共享一个数组?

将链表从 C 传递到 C++

C++ 如何将一个静态结构体数组初始化?

如何更改静态链接库中 const 字符串数组的 Visual Studio C++ 初始化序列

如何通过函数在 C++ 中设置私有静态数组?