数据结构课程设计

小白就是拽 贡献于2018-07-05

作者 user  创建于2016-04-26 04:34:00   修改者K03  修改于2016-05-03 05:37:00字数5036

文档摘要:数据结构课程设计作
关键词:

 学年论文 (课程论文、课程设计) 题  目: 数据结构课程设计 作  者: 刘天毅   所在学院: 信息科学与工程学院 专业年级: 计算机14-3 指导教师: 阿孜古丽·牙会甫 职  称:  副教授      2016年06月24日 目录 1.绪论 7 1.1 7 1.2 7 2、学生匹配系统的设计与实现 8 2.1 《学生匹配问题》需求分析 8 2.2 《学生匹配问题》概要设计 8 2.2.1 数据结构的设计 8 2.2.2存储方式 8 2.2.3 基本操作的设计 8 2.3 详细设计 8 2.4关键代码 8 2.5 测试及结果分析 8 2.6 小结 8 3.《树形结构题目》 9 3.1 《》需求分析 9 3.2 《》概要设计 9 3.2.1 数据结构的设计 9 3.2.2存储方式 9 3.2.3 基本操作的设计 9 3.3 详细设计 9 3.4关键代码 9 3.5 测试及结果分析 9 3.6 小结 9 4.《图形结构题目》 10 4.1 《》需求分析 10 4.2 《》概要设计 10 4.2.1 数据结构的设计 10 4.2.2存储方式 10 4.2.3 基本操作的设计 10 4.3 详细设计 10 4.4关键代码 10 4.5 测试及结果分析 10 4.6 小结 10 5.《检索题目》 11 6、总结 12 1.绪论 1.1 1.2 2、学生匹配问题系统的设计与实现 2.1 《学生匹配问题》需求分析 一班有m个女生,有n个男生(m不等于n),现要开一个舞会。男女生分别编号坐在舞池的两边的椅子上,每曲开始时,依次从男生和女生中各出一人配对跳舞,本曲没成功配对者坐着等待下一曲找舞伴。 本程序需求: (1)输出每曲配对情况 (2)计算出任何一个男生(编号为X)和任意女生(编号为Y),在第K曲配对跳舞的情况。至少求出K的两个值。 2.2 《学生匹配问题》概要设计 2.2.1 数据结构的设计 #define MaxSize 100 typedef int ElemType; typedef struct QNode { int num; //数据域,保存学生编号 struct QNode *next; }QNode,*QueuePtr; //结点结构 typedef struct { QueuePtr front; QueuePtr rear; //队首和队尾指针 } SqQueue; //队列结构 2.2.2存储方式 顺序存储方式:循环队列。对于匹配算法,运用队列方式,两个队列同时出队,出队的两个元素互相匹配,并且匹配过后不影响其他的匹配结果,更加方便。 是否从文件读写数据:否 2.2.3 基本操作的设计(功能模块的设计) 为了实现题目规定的功能,设计了那些基本操作,描述操作名称、功能、调用条件以及返回值,各模块之间的调用关系(可以用图形方式描述) 操作名称 InitQueue(SqQueue &q) EnQueue(SqQueue &q,int num) DeQueue(SqQueue &Q,ElemType &num) menu1() Printjudge(int m,int n,int k) Printtwo(int m,int n,int k) 操作功能 队列的初始化 入队操作 出队操作 提示菜单 输出每曲匹配情况,m,n,k分别表示女生人数,男生人数,歌曲数 输出要查找的男生和女生的跳舞曲数,m,n,k分别表示女生人数,男生人数,歌曲数 返回值 void int void void void void void InitQueue(SqQueue &q);//队列的初始化 int EnQueue(SqQueue &q,int num);//入队操作 void DeQueue(SqQueue &Q,ElemType &num);//出队操作 void menu1();//提示菜单 void Printjudge(int m,int n,int k);//输出每曲匹配情况,m,n,k分别表示女生人数,男生人数,歌曲数 void Printtwo(int m,int n,int k);//输出要查找的男生和女生的跳舞曲数,m,n,k分别表示女生人数,男生人数,歌曲数 2.3 详细设计(根据模块划分情况,进一步分节) 描述各基本操作模块或关键算法的设计,可以用流程图来描述。 队列基本操作模块: void InitQueue(SqQueue &q);//队列的初始化 int EnQueue(SqQueue &q,int num);//入队操作 void DeQueue(SqQueue &Q,ElemType &num);//出队操作 判断并输出模块: void Printjudge(int m,int n,int k);//输出每曲匹配情况,m,n,k分别表示女生人数,男生人数,歌曲数 void Printtwo(int m,int n,int k);//输出要查找的男生和女生的跳舞曲数,m,n,k分别表示女生人数,男生人数,歌曲数 2.4关键代码(根据模块划分情况进一步分节) 系统中关键模块的代码,代码前应该用文字说明代码所属模块的名称,算法时间复杂度的计算。 1. 队列基本操作模块:T(n)=O(1) void InitQueue(SqQueue &q)//初始化 { QueuePtr p; p=(QNode *)malloc (sizeof(QNode)); q.front=p; q.rear=p; q.front->next=NULL; } 2. 队列基本操作模块:T(n)=O(1) int EnQueue(SqQueue &q,int num)//入队 { QueuePtr p; /* if ((q->rear+1)%MaxSize==q->front) //队满 { printf("\n循环队列满!\n"); return 0; }*/ p=(QNode *)malloc(sizeof(QNode)); p->num=num; p->next=NULL; q.rear->next=p; q.rear=p; return 1; } 3. 队列基本操作模块:T(n)=O(1) void DeQueue(SqQueue &Q,ElemType &num)//出队 { QueuePtr p,q; if (Q.front==Q.rear) //队空 printf("\n循环队列空!\n"); 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); } 4.判断并输出模块:T(n)=O(n),n为歌曲数目。 void Printjudge(int m,int n,int k)//输出每曲匹配情况 { SqQueue W;//女生队 SqQueue M;//男生队 int i,j; int e1,e2; InitQueue(W); InitQueue(M); for(i=1;i<=m;i++) EnQueue(W,i); //将女生信息入队 for(i=1;i<=n;i++) //将男生信息入队 EnQueue(M,i); for(i=1;i<=k;i++) { printf("-------------------第%d首歌曲-------------------\n",i); printf("-------------女生编号--------男生编号----------\n"); if(m<=n)//女生小于男生 { for(j=1;j<=m;j++) { DeQueue(W,e1);//匹配完成后出队,e1保存此时出队的编号 DeQueue(M,e2); printf(" %d %d\n",e1,e2); EnQueue(W,e1);//循环入队,即匹配完输出之后,再将这个编号入队(男女生同理) EnQueue(M,e2); } } else { for(j=1;j<=n;j++) { DeQueue(W,e1);//匹配完成后出队,e1保存此时出队的编号 DeQueue(M,e2); printf(" %d %d\n",e1,e2); EnQueue(W,e1);//循环入队,即匹配完输出之后,再将这个编号入队(男女生同理) EnQueue(M,e2); } } } } 5.判断并输出模块:T(n)=O(n)。 void Printtwo(int m,int n,int k)//输出要查找的男生和女生的跳舞曲数 { SqQueue W;//女生队 SqQueue M;//男生队 int a,b,i,j; int e1,e2; int count=0; int c[10]={0}; int *t=c; int tag=1; QueuePtr p,q; printf("请输入要查找的男生编号:"); scanf("%d",&a); printf("请输入要查找的女生编号:"); scanf("%d",&b); InitQueue(W); InitQueue(M); for(i=1;i<=m;i++) { EnQueue(W,i); } for(i=1;i<=n;i++) { EnQueue(M,i); } for(i=1;i<=k;i++) { if(m<=n)//女生小于男生 { for(j=1;j<=m;j++) { p=W.front->next; q=M.front->next; if(p->num==a && q->num==b)////若学生号码数与学生编号相同 { if(p->num==a && q->num==b) { *t=i;//将跳过的舞蹈编号存入数组t tag++;//数组个数+1 t++;//数组元素+1 } count++; } DeQueue(W,e1);//匹配完成后出队,e1保存此时出队的编号 DeQueue(M,e2); EnQueue(W,e1);//循环入队,即匹配完输出之后,再将这个编号入队(男女生同理) EnQueue(M,e2); } } else { for(j=1;j<=n;j++) { p=W.front->next; q=M.front->next; if(p->num==a && q->num==b)////若学生号码数与学生编号相同 { if(p->num==a && q->num==b) { *t=i;//将跳过的舞蹈编号存入数组t tag++;//数组个数+1 t++;//数组元素+1 } count++; } DeQueue(W,e1);//匹配完成后出队,e1保存此时出队的编号 DeQueue(M,e2); EnQueue(W,e1);//循环入队,即匹配完输出之后,再将这个编号入队(男女生同理) EnQueue(M,e2); } } } printf("该队男女生共跳舞%d次\n",count); if(count==0) printf("该队男女生未跳过舞!\n"); else { printf("要查找的男女生跳舞的曲目是:"); for(i=0;i

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档