C# 利用 Queue(队列) 解决舞伴配对问题

C# 利用 Queue(队列) 解决舞伴配对问题

【案例描述】
本案例主要讲解具体队列结构的泛型类型 Queue 的使用方法。案例以模拟舞伴配对为例,在舞会上,男士和女士各排成一队,组成两队等待跳舞的队伍。当舞曲开始时,依次从男士队伍和女士队伍的头部各出一人组成舞伴,直到有一队全部配对无一人剩下为止。剩下未配对的人留在等待队伍中,等待下一轮舞曲开始时,他们先参与配对。当舞曲完成时,跳舞队伍中的人回到等待队伍的末尾等待下一轮舞曲的开始。
【实现过程】
(1)创建一个名为 PartnerMatch 的控制台应用程序。
(2)初始化男士等待队列和女士等待队列。在 main 函数中添加代码如下:
//进入舞厅的男士列表
string[] gentlemen = new string[] { 「郑一」, 「张三」, 「王五」, 「周七」, 「钱九」 };
//进入舞厅的女士列表
string[] ladies = new string[] { 「胡二」, 「李四」, 「赵六」};
Queue waitingGentlemen = new Queue();   //男士等待队列
Queue waitingLadies = new Queue();      //女士等待队列
Queue dancingGentlemen = new Queue();   //男士跳舞队列
Queue dancingLadies = new Queue();      //女士跳舞队列
//男士进入等待队列
foreach (string gentleman in gentlemen) waitingGentlemen.Enqueue(gentleman);
//女士进入等待队列
foreach (string lady in ladies)waitingLadies.Enqueue(lady);
(3)舞曲开始时对男士和女士进行配对组成舞伴。在 main 函数中添加代码如下:
int turns = 1;     //舞曲场次
do
{
Console.Clear();
Console.WriteLine(「第 {0} 场舞曲开始:」, turns++);
while (waitingGentlemen.Count > 0 && waitingLadies.Count > 0)
{
string gentleman = waitingGentlemen.Dequeue();  //从等待队列头部出来一位男士
string lady = waitingLadies.Dequeue();        //从等待队列头部出来一位女士
Console.WriteLine(「{0} 先生与 {1} 女士配成舞伴开始跳舞!」, gentleman, lady);
dancingGentlemen.Enqueue(gentleman);          //男士进入跳舞队列
dancingLadies.Enqueue(lady);                  //女士进入跳舞队列
}
//输出剩下没有舞伴的先生和女士
foreach (var gentleman in waitingGentlemen) Console.WriteLine(「{0}
先生等待舞伴!」, gentleman);
foreach (var lady in waitingLadies) Console.WriteLine(「{0} 女士等待舞伴!」, lady);
Console.WriteLine(「舞曲停止:」);
while (dancingGentlemen.Count > 0 && dancingLadies.Count > 0)
{
string gentleman = dancingGentlemen.Dequeue();  //从跳舞队列中出来一位男士
string lady = dancingLadies.Dequeue();        //从跳舞队列中出来一位女士
Console.WriteLine(「{0} 先生进入男士等待队列!」, gentleman);
Console.WriteLine(「{0} 女士进入女士等待队列!」, lady);
waitingGentlemen.Enqueue(gentleman);          //男士进入等待队列末尾
waitingLadies.Enqueue(lady);                  //女士进入等待队列末尾
}
} while (Console.ReadLine() != 「exit」) ;
【代码解析】
案例代码中,通过创建 4 个 Queue 类型变量来存储男士等待队列、女士等待队列、男士跳舞队列和女士跳舞队列,其中 T 为元素的类型。此处为 string 类型。Queue 类型主要是以队列的形式存储数据元素的,通过调用该类型的 Enqueue 方法将一个元素添加到队列的尾部,通过 Dequeue 方法从队列的头部取出一个元素。
注意:队列的结构特点是先进队的元素先出队,后进队的元素后出队。因此,队列中的元素从队列尾部进入,从队列头部取出。
案例代码中按男士和女士的到场时间顺序将男士和女士添加到等待队列中。当舞曲开始时,先到的人先从等待队列中出来配对跳舞。等舞曲结束后,又将跳舞的人添加到等待队伍的末尾,让上一轮未参数配对跳舞的人优先参加下一轮的配对。
 

你可能感兴趣的:(c#,开发语言)