佇列 舞伴問題

2021-09-27 09:59:41 字數 1490 閱讀 9584

【實驗要求】

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

【實驗提示】

先入隊的男士或女士亦先出隊配成舞伴。因此該問題具體有典型的先進先出特性,可用佇列作為演算法的資料結構。在演算法中,假設男士和女士的記錄存放在乙個陣列中作為輸入,然後依次掃瞄該陣列的各元素,並根據性別來決定是進入男隊還是女隊。當這兩個佇列構造完成之後,依次將兩隊當前的隊頭元素出隊來配成舞伴,直至某佇列變空為止。此時,若某隊仍有等待配對者,演算法輸出此佇列中等待者的人數及排在隊頭的等待者的名字,他(或她)將是下一輪舞曲開始時第乙個可獲得舞伴的人。

【實驗要求】

利用佇列實現,儲存結構採用順序或鏈式均可

#include#include#includeusing namespace std;

#define maxqsize 100

#define true 1

#define false 0

#define ok 1

#define error 0

#define overflow -2

typedef int status;

typedef char qelemtype;

typedef struct

person;

typedef struct

sqqueue;

sqqueue mdancers,fdancers;//分別存放男士和女士入隊者佇列

status initqueue (sqqueue &q) // 構造乙個空佇列 q

// initqueue

status enqueue ( sqqueue &q, person e )// 若佇列滿,則返回 error;若佇列不滿,則插入元素 e 為佇列 q 新的隊尾元素。

// enqueue

status dequeue ( sqqueue &q, person &e ) // 若佇列空,則返回 error;若佇列不空,則刪除 q 的佇列頭元素,用 e 返回其值,並返回 ok 。

// dequeue

person gethead(sqqueue q) //返回q的對頭元素,不修改指標

status queueempty(sqqueue &q)

void dancepartner(person dancer , int num)//結構陣列danccer中存放跳舞的男女,num是跳舞的人數

佇列 舞伴問題

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

資料結構 舞伴問題 佇列

舞伴問題 假設在週末舞會上,男士們和女士們進入舞廳時,各自排成一隊,男女人數不一定相等。跳舞開始時,依次從男隊和女隊的 隊首上各出一人配成舞伴。舞曲結束後,男女各自入隊。現在用小寫字母表示男士,大寫字母表示女士,試輸入乙個字串,按照大小寫將男女歸入兩個佇列,試寫出當所有人都至少跳舞一次時,舞伴的組合...

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

假設在週末舞會上,男士和女士進入舞廳,各自排成一隊,跳舞開始時,依次從男隊和女隊的隊頭各出一人配成舞伴。若兩隊初始人數不相同,那麼較長的那一對中未配對者等待下一輪舞曲,試寫一種演算法模擬上面的舞伴問題 我們可以看出這是乙個典型的佇列問題,我們只需要把男士隊和女士隊看成佇列,我們可以把男士和女士的資訊...