迴圈佇列之舞伴問題 含原始碼詳解

2021-10-06 22:40:10 字數 1340 閱讀 5579

假設在週末舞會上,男士和女士進入舞廳,各自排成一隊,跳舞開始時,依次從男隊和女隊的隊頭各出一人配成舞伴。若兩隊初始人數不相同,那麼較長的那一對中未配對者等待下一輪舞曲,試寫一種演算法模擬上面的舞伴問題

我們可以看出這是乙個典型的佇列問題,我們只需要把男士隊和女士隊看成佇列,我們可以把男士和女士的資訊都儲存在乙個陣列中,再根據不同的性別儲存到不同的佇列中。然後開始給佇列配對,當有乙個隊列為空的時候,另外乙個佇列有等待者,則輸出隊頭等待者的姓名,此人將是下乙個可以獲得舞伴的人

#include

using namespace std;

#define maxsize 100

#define status int

#define ok 1

#define error 0

#define qelemtype person

typedef struct

person;

typedef struct

sqqueue;

status initqueue

(sqqueue &q)

//佇列初始化

status enqueue

(sqqueue &q,qelemtype e)

//入隊

status dequeue

(sqqueue &q,qelemtype &e)

//出隊

qelemtype gethead

(sqqueue q)

//得到佇列頭元素

status queueempty

(sqqueue q)

void dancepartner

(person dance,

int num)

//dance表示跳舞男女的資訊,num表示跳舞的人數

cout<<

"the dancing partners are:\n"

;while(!

queueempty

(wdancers)&&!

queueempty

(mdancers))if

(!queueempty

(wdancers))if

(!queueempty

(mdancers))}

intmain()

dancepartner

(dance,n)

;}

例子:

佇列 舞伴問題

所有男士女士存放在陣列dancer中,按照性別分為兩個佇列,之後每個佇列各出頭元素進行配對,配對時輸出出對人姓名,最後再輸出剩餘第乙個人的名字。演算法思路 設定兩個佇列分別儲存男女,先依次入隊,只有兩個隊不空則不斷出隊配合,迴圈結束後,輸出非空隊的對頭元素。首先定義乙個人的結構體 typedef s...

佇列 舞伴問題

實驗要求 假設在週末舞會上,男士們和女士們進入舞廳時,各自排成一隊。跳舞開始時,依次從男隊和女隊的隊頭上各出一人配成舞伴。若兩隊初始人數不相同,則較長的那一隊中未配對者等待下一輪舞曲。現要求寫一演算法模擬上述舞伴配對問題。實驗提示 先入隊的男士或女士亦先出隊配成舞伴。因此該問題具體有典型的先進先出特...

資料結構之舞伴配對問題

有多個男生和女生,要求為男女生進行選舞伴的配對,輸出的結果根據自己的設計而定,我制定的問題是,輸入乙個數字 代表第幾支舞曲 然後輸出在此曲中跳舞的男女生的配對情況。沒有用迴圈佇列,用的鏈隊。include using namespace std typedef struct person typed...