西
安
郵電大
學(計算機學院)
資料結構課內實驗報告
實驗名稱:
舞伴問題
專業名稱:
電腦科學與技術
班
級:計科1505
學生姓名:
賀遠
學號(8位):
04151154
指導教師:
初建瑋、
曾豔實驗日期:
2023年10
月21日
、10月31日
一.實驗目的
1.通過對佇列的學習,掌握佇列的邏輯結構和儲存結構,並實現舞伴問題。
2.掌握佇列的基本運算。
3.通過應運佇列知識,選擇合適儲存結構,編寫演算法實現舞伴問題,訓練學生的分析和解決實際問題的
能力。二.實驗內容
1.[問題描述
]
舞伴問題的描述:
假設在週末舞會上,男士們和女士們進入舞廳時各自排成一隊,跳舞開始時,依次從男隊和女隊的隊頭上各出一人配成舞伴,若兩隊初始人數不相同,則較長的那一隊中未配對者等待下一輪舞曲。現要求設計乙個函式模擬上述舞伴配對問題
,試設計程式實現之。
三.實驗方案設計
1.分析 由於
當男女排好隊
後,依次從男隊和女隊的隊頭上各出一人配成舞伴
,剩下的人
繼續按順序配對
,具有典型的先進先出特性,因此可以用佇列作為演算法的資料結構。在演算法中應該先設定兩個佇列:mdancers(mp),
wdancers(wp)
分別存放男士和女士入隊者。假設男士和女士的資訊存放在一位陣列中,作為輸入,然後依次掃瞄該陣列各元素,並根據性別來決定是進入男隊還是女隊。構造好兩個佇列後,依次將兩隊隊頭元素出隊來匹配成舞伴,直至某佇列變為空,此時若某隊仍有待匹配者,輸出等待者的名字。
2.採用的資料結構
typedef struct
person;
typedef struct
mqueue; 3.
演算法實現
①整體結構
main()
②佇列初始化
mqueue *mdancers(mqueue *mp)//佇列初始化
③入隊inmqueue(mqueue *mp,person p)//入隊
else
} ④匹配
dencers(person p[20],int num,mqueue *mp,mqueue *wp)
for(i=0;i//將跳舞者依其性別入隊
printf("匹配結果:
\n");
while(!emqueue(mp)&&!emqueue(wp))
//出隊,輸出下乙個
等待者的名字
if(!emqueue(mp))
if(!emqueue(wp))
}
4.主要演算法流程圖
y n
n y y
y n
y n
四.該程式的功能和執行結果
1.
2.
3.
五.實驗總結
1.
實驗過程中遇到的問題及解決辦法;
剛開始對佇列結構缺乏清楚的認識,對佇列的操作不太熟練,導致繞了很多彎路,還有就是不了解計算機內部的儲存,開始輸入名字時為了方便,採用字元型別,結果輸入時按空格鍵,導致結果總是出錯,後來向同學諮詢,在同學講解之後明白了其中緣由,經過改正後程式得以正確執行。
2.實驗方案的優點和缺點;
優點是使用了順序佇列實現了舞伴問題,易於理解。
缺點是只能匹配一首歌曲,不能進行迴圈。
3.對設計及除錯過程的心得
體會;從這次實驗,我明白,要學好資料結構必須得親自動手去編寫演算法,平時上課老師講的還能聽懂,感覺教材上的演算法例項沒什麼好寫的。可是經過本次實驗我才發現自己的想法是多麼的無知,就這次實驗的題目,我看了一下覺得沒什麼難度,演算法也挺簡單,結果編寫過程中還是出了許多問題。以後一定要加強動手編寫,不能眼高手低。
佇列 舞伴問題
所有男士女士存放在陣列dancer中,按照性別分為兩個佇列,之後每個佇列各出頭元素進行配對,配對時輸出出對人姓名,最後再輸出剩餘第乙個人的名字。演算法思路 設定兩個佇列分別儲存男女,先依次入隊,只有兩個隊不空則不斷出隊配合,迴圈結束後,輸出非空隊的對頭元素。首先定義乙個人的結構體 typedef s...
佇列 舞伴問題
實驗要求 假設在週末舞會上,男士們和女士們進入舞廳時,各自排成一隊。跳舞開始時,依次從男隊和女隊的隊頭上各出一人配成舞伴。若兩隊初始人數不相同,則較長的那一隊中未配對者等待下一輪舞曲。現要求寫一演算法模擬上述舞伴配對問題。實驗提示 先入隊的男士或女士亦先出隊配成舞伴。因此該問題具體有典型的先進先出特...
舞伴問題(鏈隊)
問題 假設在週末舞會上,男士們和女士們進入舞廳時,各自排成一隊。跳舞開始時,依次從男隊和女隊的隊頭上各出一人配成舞伴。若兩隊初始人數不相同,則較長的那一隊中未配對者等待下一輪舞曲。現要求寫一演算法模擬上述舞伴配對問題 程式功能 能夠使男女依次組合,如若男女相等配對完成,否則輸出等待下一輪的男士或者女...