如何生成随机数并将它们插入优先级队列?
Posted
技术标签:
【中文标题】如何生成随机数并将它们插入优先级队列?【英文标题】:How do I generate random numbers and insert them to a priority queue? 【发布时间】:2019-04-07 08:26:17 【问题描述】:我已经使用具有所需功能的 SLList 实现了 PriorityQueue。我想生成 100 个随机整数并将它们添加到队列(PriorityQueue 类的对象)。然后输出队列中的前 20 个数字。
我尝试使用 RandomGenerator() 生成随机数,但它总是给出相同的随机数。生成 100 个随机数的循环工作正常,但它总是推送相同的随机数。如何生成随机数并将其插入优先级队列?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp5
class Class1
public class Node
public int data;
public int priority;
public Node next;
public static Node node = new Node();
public static Node newNode(int d, int p)
Node temp = new Node();
temp.data = d;
temp.priority = p;
temp.next = null;
return temp;
public static int peek(Node head)
return (head).data;
public static Node pop(Node head)
Node temp = head;
(head) = (head).next;
return head;
public static Node push(Node head,int d, int p)
Node start = (head);
Node temp = newNode(d, p);
if ((head).priority > p)
// Insert New Node before head
temp.next = head;
(head) = temp;
else
while (start.next != null &&
start.next.priority < p)
start = start.next;
// Either at the ends of the list
// or at required position
temp.next = start.next;
start.next = temp;
return head;
public static int isEmpty(Node head)
return ((head) == null) ? 1 : 0;
public class RandomGenerator
// Generate a random number between two numbers
public int RandomNumber(int min, int max)
Random random = new Random();
return random.Next(min, max);
public string RandomPassword()
StringBuilder builder = new StringBuilder();
builder.Append(RandomNumber(1000, 9999));
return builder.ToString();
public static void Main(string[] args)
/*
Node pq = newNode(4, 1);
pq = push(pq, 5, 2);
pq = push(pq, 6, 3);
pq = push(pq, 7, 0);
while (isEmpty(pq) == 0)
Console.Write("0:D ", peek(pq));
pq = pop(pq);
*/
RandomGenerator generator = new RandomGenerator();
Node pq = newNode(4, 0);
int p = 1;
// Console.WriteLine($"Random number is rand");
for (int i = 0; i < 100; i++)
int rand = generator.RandomNumber(0, 1000000);
pq = push(pq, rand, p);
p = p + 1;
while (isEmpty(pq) == 0)
Console.Write("0:D ", peek(pq));
pq = pop(pq);
// Console.ReadKey();
我期望输出: 8 200 1 2 5 4 3...(即生成的任何随机数) 而我得到的输出: 6 200 200 200 200 200...(即同一个随机数被推入优先队列)
【问题讨论】:
请看一下这个问题:***.com/questions/767999/… 以更好地了解Random
的工作原理以及您可以根据需要使用哪些其他技术来生成随机数。
【参考方案1】:
当您创建Random
对象时,其种子会根据当前时间进行初始化。如果您同时创建多个Random
对象,它们都将使用相同的种子进行初始化,并在您调用Next
时返回相同的数字。
相反,您应该只构造一个Random
对象,然后在同一个对象上多次调用Next
:
public class RandomGenerator
private Random random = new Random();
// Generate a random number between two numbers
public int RandomNumber(int min, int max)
return random.Next(min, max);
【讨论】:
以上是关于如何生成随机数并将它们插入优先级队列?的主要内容,如果未能解决你的问题,请参考以下文章