在C ++中通过键盘创建N个链表,即N个数字

时间:2018-12-07 22:56:12

标签: c++ linked-list

我的程序有问题。我会尽力解释,以便您可以帮助我。

想象一下,您想拥有N个袋子,对于每个袋子,您都想输入多个球(每个袋子的最大球数= 10)。

我有一个函数,它首先介绍了袋子的数量N,然后它从用户那里读取了每个袋子的输入行,例如1 3 4 9,指出了输入到其中的元素那个袋子,依此类推,直到每个袋子N

我遇到的问题是,在全部引入这些球之后,如何“记住”这些球的输入顺序?在上面的示例行中,顺序为:先是1,然后是3,然后是4,最后是9。

在其他功能中,我需要为每个包i按输入顺序获取其元素,并对其进行处理。

我的代码类似于

for (int i = 0; i < N ; i ++){
    //read all numbers
    //and for each number "j"
    G[i][j] = true;
}

Gbool G[x][y]的地方,我用它来创建元素与其包之间的关系,但这是行不通的,因为它没有给我输入顺序。

我曾考虑过创建链接列表,但是我不知道如何使用键盘上的N创建N列表,然后访问每个列表。

我不知道是否清楚,但是我不需要随机访问每个包中的每个元素,我只需要一个包,按输入顺序对其元素进行迭代。

1 个答案:

答案 0 :(得分:0)

这是std::vector最适合的情况。您不需要使用链接列表(例如std::list)。

例如:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <limits>

struct Bag
{
    int NumBalls;
    int Balls[10];

    Bag() : NumBalls(0) {}
};

int main()
{
    int N;
    std::cout << "How many bags do you want? ";

    if (!((std::cin >> N) && (N > 0)))
    {
        std::cout << "Bad input!" << std::endl;
        return 0;
    }
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

    std::vector<Bag> Bags(N);

    for (int i = 0; i < N; ++i)
    {
        std::cout << "Enter balls for bag " << i+1 << ": ";

        std::string line;
        if (!std::getline(std::cin, line))
            break;

        std::istringstream iss(line);

        Bag &bag = Bags[i];
        int ball;

        do
        {
            if (!(iss >> ball))
            {
                if (!iss.eof())
                    std::cout << "Bad input!" << std::endl;
                break;
            }

            bag.Balls[bag.NumBalls] = ball;
            bag.NumBalls++;
        }
        while (bag.NumBalls < 10);
    }

    std::cout << std::endl;

    for (int i = 0; i < N; ++i)
    {
        std::cout << "Bag " << i+1 << " contains:";

        Bag &bag = Bags[i];
        for(int j = 0; j < bag.NumBalls; ++j)
            std::cout << " " << bag.Balls[j];

        std::cout << "\n";
    }

    return 0;
}

Live Demo