数据结构 本科生导师制问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}else if(L->type == 2) (*j)++; else; countStud((L->ptr).tp, i, j); countStud((L->ptr).hp, i, j); } return 1; } 输出:将某导师所带学生情况输出。 void PrintGLNode(GLNode *e){ if(e==NULL) return; printf("%s-%s-%d", e->name, e->prof, e->type); } 打印:将广义表整个输出。 void PrintGList(GList L){ if(L==NULL) return; printf("("); while(L!=NULL){ PrintGLNode(L); PrintGList((L->ptr).tp); printf(" "); L = (L->ptr).hp; } printf(")"); } 退出:程序结束
2、 数据结构设计
本实验使用的数据结构是广义表,广义表采用头尾链表存储结构 来实现。 定义教师、学生结点结构体如下: typedef struct GLNode { char name[100]; /*教师或学生的姓名*/ char prof[100]; /*教师结点表示职称,学生结点表示班级*/ int type; /*结点类型:0-教师,1-研究生,2-本科生*/ struct {struct GLNode *hp, *tp;} ptr; /*hp指向同级的下一结点,tp指向下级的首结点*/ }GList; 人员信息的表示形式为:高老师-教授-0、李刚-二班-1、李明-二 班-2. 人员信息中的姓名、职称、班级、人员类型用“-”隔开,如高老师教授-0,“高老师”表示姓名,“教师”表示职称,“0”表示人员的类型是教 师;李刚-二班-1,“李刚”表示姓名,“二班”表示班级,“1”表示人员的 类型是研究生;李明-二班-2,“李明”表示姓名,“二班”表示班
四、界面设计
ቤተ መጻሕፍቲ ባይዱ
5、 运行测试与分析
六、实验收获与思考 1. 掌握本科生导师制问题的思想与算法 2. 使用数据结构广义表实现本科生导师制问题 3. 结合理论,深入掌握知识 教师评分: 教师签字:
计算机科学与技术学院实验课程归档材料规范
实验报告一 实验课名称:数据结构与程序设计实验 实验名称:本科生导师制问题 班级: 1、 问题描述 学号: 实验类型:设计型实验 姓名: 时间:
在高校的教学改革中,有很多学校实行了本科生导师制。一个班 级的学生被分给几个老师,每个老师带n个学生,如果该老师还带研究 生,那么研究生也可直接带本科生。本科生导师制问题中的数据元素 具有如下形式: 导师带研究生 (老师,((研究生1,(本科生1,…,本科生m1)), (研究生2,(本科生1,…,本科生m2))…)) 导师不带研究生 (老师,(本科生1,…,本科生m)) 导师的自然情况只包括姓名、职称;研究生的自然情况只包括姓 名、班级;本科生的自然情况只包括姓名、班级。
if(l){ if(!strcmp((*l)->name, name)){ temp = *l; *l = ((*l)->ptr).hp; return temp; } if(((*l)->ptr).tp){ p = &(((*l)->ptr).tp); temp = DeleteGLNode(p, name); if(temp) return temp; } if(((*l)->ptr).hp){ p = &(((*l)->ptr).hp); temp = DeleteGLNode(p, name); if(temp) return temp; } }else{ return NULL; } } 查询:查询导师、本科生(研究生)的情况。 GList TravGList(GList L, char *name){ GList l; while(L!=NULL){ if(!strcmp(L->name,name)) return L; l = TravGList((L->ptr).tp, name); if(l) return l; L = (L->ptr).hp; } return NULL; } 统计:某导师带了多少个研究生和本科生。 int countStud(GList L, int *i, int *j){ if(L){ if(L->type == 1){ (*i)++;
级,“2”表示人员的类型是本科生。 广义表((高老师-教授-0,(李明-一班-2,王平-二班-2)), (李老师-副教授-0,(白梅-二班-1,(李刚-一班-2)))可以用图3 表示。 图3 导师制用广义表实现示例
三、算法设计
建立:建立导师广义表。 GList InitGList(){ GList L = NULL, *l; GList e; e = InitGLNode("teacherli", "fujiaoshou", 0); InsertFirst_GL(&L, e); e = InitGLNode("teachergao", "jiaoshou", 0); InsertFirst_GL(&L, e); l = &((L->ptr).tp); e = InitGLNode("wangping", "erban", 2); InsertFirst_GL(l, e); e = InitGLNode("liming", "yiban", 2); InsertFirst_GL(l, e); l = &((((L->ptr).hp)->ptr).tp); e = InitGLNode("baimei", "erban", 1); InsertFirst_GL(l, e); l = &(((*l)->ptr).tp); e = InitGLNode("ligang", "yiban", 2); InsertFirst_GL(l, e); return L; } 插入:将某位本科生或研究生插入到广义表的相应位置。 int InsertFirst_GL(GList *L, GLNode *e){ (e->ptr).hp = *L; *L = e; return 1; } 删除:将某本科生或研究生从广义表中删除。 GList DeleteGLNode(GList *L, char *name){ GList *l = L, *p, temp;