数据结构课程设计学生搭配问题由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据结构学生搭配问题”。
数据结构课程设计
报 告
设计题目:
学生搭配问题
专 业: 计算机科学与技术 学生姓名: 班级学号: 分组成员: 指导教师:
学生搭配问题课程设计报告
一、设计时间
二、设计地点
三、设计目的1.通过这次课程设计进一步熟悉基本概念; 2.熟练掌握C语言编程,了解程序基本的流程;
3.运用所学C语言知识,掌握数据结构方法循环队列应用,算法思路设计; 4.培养查阅资料,独立思考问题的能力。
四、设计小组成员
五、指导老师
六、设计课题
学生搭配问题
七、基本思路及关键问题的解决方法
基本思路:队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。
循环队列是在队列的顺序存储结构中,除了用乙组地址连续的存储单元依次存放从队列头到队列尾的元素外,尚需附设两个指针front和rear分别指示队列头元素和队列尾元素的位置。
循环队列(两个),将男生、女生两组人分别存放,以实现循环配对输出。循环队列的入队,出队,判队满,判队空。
(1)要模拟动态地显示出现题目中所要求的循环,我们要先建立两个循环队列SqQueue和SqQueue2。
(2)将男生、女生两组人分别存入这两个队列。以实现他们的循环配对输出,这是循环队列固有的特性。
(3)利用循环队列的特性,将男女生分别进行入队列和出队列操作,且实现搭配输出。
(4)循环队列的长度分别设为男女生的个数即可。
(5)在计算机终端输出的结果是:根据要求输出男生女生搭配情况
关键问题: 循环队列的应用
解决方法:数据模型(逻辑结构): 循环队列(两个),将男生、女生两组人分别存放,以实现循环配对输出。
存储结构: 循环链表
核心算法: 循环队列的入队,出队,判队满,判队空。输入数据: 男生人数、女生人数,歌曲数量
输出数据: 每一首歌曲播放时,男生和女生搭配情况(只输出编号即可)当要查找的男女搭配时输出歌曲编号,和他们搭配的总次数。通过以上分析,该程序具有可行性。
八、算法及流程图
九、调试过程中出现的问题及解决方法
问题:在构造队列时,设队列分配的最大空间为男女生的个数,此时便无法根据Q.front=Q.rear来判别队列空间是“空”还是“满”,因此,在入队操作即插入一个新元素作为新的队尾元素时出现了问题,即最后一位同学无法入队。
解决方法:将队列分配的最大空间至少再增加一个
十、测试及运行结果
测试输入数据:男女生的个数曲子数和要查找的男女生编号
输出结果为:每首曲子男女生搭配的情况 程序运行界面:
十一、课程设计心得体会
通过一周的学习和实践,解决实际问题(学生搭配问题),让我对循环队列有了更深的了解,对数据结构产生了浓厚的兴趣,同时也让我提高了解决实际问题的能力。
我们要不断的通过上机来提高自己的学习水平,在上机的同时改正了自己对某些算法的错误使用,使自己在通过程序解决问题时抓住关键算法,有了算法设计思想和流程图,并用C语言描绘出关键算法
十二、源程序
#include #include #include #include #define MAXSIZE 60 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW-1 typedef int system;typedef struct QNode{ int num;struct QNode *next;}QNode,* QueuePtr;typedef struct{ QueuePtr front;QueuePtr rear;}LinkQueue;void sleep(clock_t wait)//延迟函数 { clock_t goal;goal = wait + clock();while(goal > clock());} void InitQ(LinkQueue &Q)//建立空队列 { QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));Q.front=p;Q.rear=p;Q.front->next=NULL;} void EnQueue(LinkQueue &Q,int num){ QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));p->num=num;p->next=NULL;Q.rear->next=p;Q.rear=p;} void DeQueue(LinkQueue &Q, int &num){ QueuePtr p,q;if(Q.front==Q.rear)
printf(“队列为空”);p=Q.front->next;num=p->num;Q.front->next=p->next;q=p->next;if(Q.rear==q)
Q.rear=Q.front;free(p);} void printF(LinkQueue &F,int i)//打印第i首曲子时女队的情况 { QueuePtr p;int n=1;while(n
printf(“_ ”);
n++;} p=F.front->next;while(F.rear!=p){
printf(“%d ”,p->num);
p=p->next;} printf(“%d n”,p->num);} void printM(LinkQueue &M,int i)//打印第i首曲子时男队的情况 { QueuePtr p;int n=1;while(n
printf(“_ ”);
n++;} p=M.front->next;while(M.rear!=p){
printf(“%d ”,p->num);
p=p->next;} printf(“%d n”,p->num);} void main(){ int m,n,k,i,a,b;int count=0,num;QueuePtr p,q;LinkQueue F;//女生队
LinkQueue M;//男生队
printf(“请输入女生数量:”);scanf(“%d”,&m);printf(“请输入男生数量:”);scanf(“%d”,&n);printf(“请输曲子号:”);scanf(“%d”,&k);printf(“请输入要查找的男生编号:”);scanf(“%d”,&a);printf(“请输入要查找的女生编号:”);scanf(“%d”,&b);InitQ(F);InitQ(M);for(i=1;i
EnQueue(F,i);} for(i=1;i
EnQueue(M,i);} for(i=1;i
system(“CLS”);
printf(“第%d首曲子 n”,i);
printF(F,i);
printM(M,i);
p=F.front->next;
q=M.front->next;
printf(“目前跳舞的是第%d号女生和第%d号男生n”,p->num,q->num);
if(p->num==a&&q->num==b)
{
count++;printf(“第%d曲是要查找的男女生跳舞n”,i);
}
sleep(3000);
DeQueue(F,num);EnQueue(F,num);
DeQueue(M,num);
EnQueue(M,num);} printf(“该对男女生共跳舞%d次n”,count);}
十三、参考文献
[1] 数据结构(C语言版)严蔚敏 吴伟明 编著,清华大学出版社 [2] C语言程序设计(第三版)谭浩强 著,清华大学出版社