如何将唯一随机整数插入链表?

时间:2017-10-28 13:20:28

标签: c++ visual-studio

我一直在试图弄清楚如何插入50个独特的随机整数,范围从1到100.我看了其他的例子,但很难转换成我正在使用的代码。有人可以把我放在正确的方向而不改变我有太多的代码吗?

void displayListForward(SortedListInterface<int>* listPtr)
{
cout << "The sorted list contains " << endl;
for (int pos = 1; pos <= listPtr->getLength(); pos++)
{
    cout << listPtr->getEntry(pos) << " ";
}
cout << endl << endl;
}  


void InsertRandomInts() 
{
LinkedSortedList<int> list;
srand((unsigned)time(NULL));

for (int i = 0; i < 50; ++i) 
{
    int b = rand() % 100 + 1;
    list.insertSorted(b);
    displayListForward(&list);
}
}

2 个答案:

答案 0 :(得分:0)

问题是你让它们与众不同吗?如果是这样,您可以添加帮助函数来搜索现有列表,如果不存在则添加该数字,如果存在,则生成新数字。在另一个数据结构中创建数字,然后在创建节点时在链表中初始化它们也可能更容易。

您可以使用这样的搜索功能,以及InsertRandomInts函数中的条件来确定它是否唯一:

bool search(std::vector<std::int> list, int obj){
    for (int i = 0; i < list.size(); i++){
        // key already exists in list
        if (obj == list[i]){
            return true;
        }
    }
    // not found
    return false;
}

答案 1 :(得分:0)

首先,C ++比旧的srandrand功能要好得多pseudo-random generation utilities

其次,std::set(对于这种情况更好,std::unordered_set)非常适合获取唯一值的集合。

可以用作

std::random_device r;
std::default_random_engine e1(r());

// To get random numbers between 1 and 100 (inclusive)
std::uniform_int_distribution<int> uniform_dist(1, 100);

// A set to store values
std::unordered_set<int> random_values;

// Loop until we get 50 unique random values
while (random_values.size() < 50)
{
    random_values.insert(uniform_dist(e1));
}

// Now there are 50 unique (pseudo) random numbers in the set