1、男2和女2.第四首:男1和女4 三.概要设计 1. 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。 循环队列是在队列的顺序存储结构中,除了用乙组地址连续的存储单元依次存放从队列头到队列尾的元素外,尚需附设两个指针front和rear分别指示队列头元素和队列尾元素的位置。循环队列两个,将男生、女生两组人分别存放,以实现循环配对输出。循环队列的入队,出队,判队满,判队空。首先, 要模拟动态地显示出现题目中所要求的循环,我们要先建立两个循环队列SqQueue和SqQueue2。然后 ,将男生、女生两组人分别存入这两个队列。以实现他们的循环配对输出,这是循环队列固有的
2、特性。 接着,利用循环队列的特性,将男女生分别进行入队列和出队列操作,且实现搭配输出。循环队列的长度分别设为男女生的个数即可。最后, 在计算机终端输出的结果是:根据要求输出男生女生搭配情况 主要是循环队列的应用数据模型为逻辑结构: 循环队列两个,将男生、女生两组人分别存放,以实现循环配对输出。存储结构为循环链表核心算法是循环队列的入队,出队,判队满,判队空。输入数据为男生人数、女生人数,歌曲数量输出数据为每一首歌曲播放时,男生和女生搭配情况,只输出编号即可。当要查找的男女搭配时输出歌曲编号,和他们搭配的总次数。通过以上分析,该程序具有可行性。 2.各模块函数介绍:1)class cirular
3、Queue 作用:定义一个一个循环队列2)cirularQueue() 定义析构函数,使对象在撤销时释放3)bool IsFull() 判断队列是否已满4)bool IsEmpty() 判断队列是否为空,用于出队列前使用5)void push(T info) 入队。每对舞伴跳完舞之后,做入队处理,到达队尾,等待下次跳舞。6)void Pop(T &info) 出队。每取曲子响起时男生队列和女生队列作出队处理,两人跳舞。7)void GetHead(T &info) 取队首元素,对出队的男女进行识别。8)void Initqueue(cirularQueue&,int);初始化队列9)void
4、display(int,int);根据男生和女生的人数和曲目的数目,来判断每曲歌的男女配对情况 10)void charge(int,int); 作用:判断指定组合能否配对成功2.主函数调用关系图void GetHead(T &info)class cirularQueuecirularQueue()主函数k曲配对每曲配对数据输入输出编号void push(T info)void Pop(T &bool IsFull()IsEmpty()初始化男女循环队列3.每曲配对函数调用关系图void display(int,int)k=songnummman.pop(x)woman.pop(y) 否是输
5、出k首男x女y跳舞endk+4.第k曲配对函数调用图void charge(int,int)输出他们不会一起跳breakcountnext=NULL;(2)关键算法之二:入队函数void EnQueue(LinkQueue &Q,int num)/入队函数p-num=num;Q.rear-next=p;(3)关键算法之三:出队函数void DeQueue(LinkQueue &Q, int &num)/出队函数QueuePtr p,q;if(Q.front=Q.rear)printf(队列为空);p=Q.front-next;num=p-num;next=p-q=p-if(Q.rear=q)Q
6、.rear=Q.front;free(p);(4)关键算法之四:输出第i首曲子时女队的情况void printF(LinkQueue &F,int i) /输出第i首曲子时女队的情况int n=1;while(nwhile(F.rear!=p) %d ,p-num);p=p-printf(%d n五. 源代码#include #includetime.hmalloc.h#define MAXSIZE 60#define TRUE 1 #define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1typedef int system;t
7、ypedef struct QNode int num;struct QNode *next;QNode,* QueuePtr;typedef structQueuePtr front;QueuePtr rear;LinkQueue;void sleep( clock_t wait ) /延迟函数 clock_t goal;goal = wait + clock();while( goal clock() ) ;Q) /建立空队列Q,int num)num)F,int i) /打印第i首曲子时女队的情况void printM(LinkQueue &M,int i) /打印第i首曲子时男队的情况
8、p=M.front-while(M.rear!void main()int m,n,k,i,a,b;int count=0,num;LinkQueue F; /女生队LinkQueue M; /男生队请输入女生数量:scanf(%d,&m);请输入男生数量:n);请输曲子号:k);请输入要查找的男生编号:a);请输入要查找的女生编号:b);InitQ(F);InitQ(M);for(i=1;iq=M.front-目前跳舞的是第%d号女生和第%d号男生nnum,q-if(p-num=a&q-num=b)count+; printf(第%d曲是要查找的男女生跳舞nsleep(3000);DeQue
9、ue(F,num); EnQueue(F,num);DeQueue(M,num);EnQueue(M,num);该对男女生共跳舞%d次n,count);六.运行结果及分析测试及运行结果:测试输入数据:男生数10人 , 女生数8人 ,曲子数5, 要查找的男生编号4 ,要查找的女生编号6输出结果为:每首曲子男女生搭配的情况程序运行界面:八、收获及体会通过解决学生搭配问题,让我对循环队列有了更深的了解,同时也让我提高了解决实际问题的能力。我们要不断的通过上机来提高自己的学习水平,在上机的同时改正了自己对某些算法的错误使用,使自己在通过程序解决问题时抓住关键算法,有了算法设计思想和流程图,并用C语言描
10、绘出关键算法。以前我对数据结构(C语言描述)的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。让自己有一定的能力去改正一些常见的错误语法,很高兴这一次的学习让我对数据结构(C语言描述)有了新的认识,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。在这次课程设计对我来说都是一种锻炼,一个知识积累的过程,一种能力的提高。要打好基础,才能用更好的办法,更简洁明了的程序解决实际问题,只有这样才能进一步的取得更好的成绩。我们会更加努力,努力的去弥补自己的缺点,发展自己的优点,去充实自己,只有在了解了自己的长短之后,我们会更加珍惜拥有的,更加努力的去完善它,增进它。在解决实际问题时如果遇到了难题,我们要学会去查找大量的有关这方面的资料,还要借助于网络不断扩大自己的知识面和阅读量。这样也可以锻炼我们的自主学习能力和解决问题的能力,学到了许多以前没学到的东西。在课程设计中的程序都比较复杂,所以需要我们要更加地细心,认真的完成每一步的操作,修改语法。与此同时也让我们增加了对程序和算法进一步理解。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2