打印多列表的索引

时间:2015-10-02 20:54:03

标签: c++ loops indexing linked-list nodes

我正在尝试打印多链表的索引。每个节点都有两个元素 - 仓库编号和工具编号。我正在打印每个仓库中的所有工具。我在列表中正确迭代时遇到问题。

我没有得到正确的值,并且无法在我的方法中找到问题。

struct Node
{
    int WarehouseNumber;
    int ToolNumber;
    struct Node *n;
}

void showWarehouses()
{
    int tempvalue;
    bool flag = false;
    struct Node *s;
    s = start;
    if (start == NULL)  
    {
        cout<<"Unable";
        return;
    }
    s->WarehouseN = tempvalue;
    cout<<"Warehouse "<<tempvalue<< ": Tool ";
    while(s != NULL)
        {
            if (s->WarehouseN == tempvalue)
            {
            flag = true;
            cout<< s->ToolN <<" ";
            s = s->next;
            }
    }
}

3 个答案:

答案 0 :(得分:1)

您尚未为tempvalue分配任何值,因此会导致未定义的行为。阅读this post.

同样基于struct Node中的内容以及您的代码,我认为您可以在程序中找到类似这样的图片并打印它们。

Lined List

所以最重要的是我会写这样的代码:

void showWarehouses()
{
    int tempvalue=1;
    bool flag, cont;
    struct Node *s;
    if (start == NULL)
    {
        cout << "Unable";
        return;
    }

    cont = true;
    while (cont)
    {
        cont = false, flag = false;
        s = start;
        while (s)
        {
            if (s->WarehouseN == tempvalue){
                cont = true;
                if (!flag){
                    cout << "Warehouse " << tempvalue << ": Tool ";
                    flag = true;
                }
                cout << s->ToolN << " ";
            }
            s = s->next;
        }
        cout << endl;
        tempvalue++;
    }
}

答案 1 :(得分:0)

我假设 - &gt; warehouseN和 - &gt; toolN相应地获取仓库和工具nums。这是在你的if语句之后。

struct Node *temp;
while (s != NULL){
    temp = s;
    cout << "Warehouse " << s->warehouseN << ": Tool ";
    while (s!= NULL) {
        cout << s->toolN << " ";
        s = s-> next;
    }
    s = temp->next;
    cout << endl;
}

另外,您应该在之前启动 将其设置为开始

答案 2 :(得分:0)

如果:

s = start;
struct Node *s;

编译,你有一个更宽范围的s,它被设置为在被另一个名为showWarehouses的变量隐藏在s内之前开始。那将是一件坏事。

无论如何,直接结果是showWarehouses s永远不会被初始化,而且程序不会崩溃可能会让人感到愚蠢。由于s未初始化,程序的其余部分正在打印垃圾,因此预期输出错误。