魔方阵、本科生导师制问题第五章实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据结构实验报告实验名称:魔方阵、本科生导师制问题实验类型:综合性实验班级:20102111学号:2010211102姓名:李晓彬实验日期:2012.5.301.问题描述(1)魔方阵魔方阵是一个古老的智力问题,它要求在一个m×m的矩阵中填入1~m2的数字(m为奇数),使得每一行、每一列、每条对角线的累加和都相等。(2)本科生导师制问题在高校的教学改革中,有很多学校实行了本科生导师制。一个班级的学生被分给几个老师,每个老师带n个学生,如果该老师还带研究生,那么研究生也可直接带本科生。本科生导师制问题中的数据元素具有如下形式:导师带研究生(老师,((研究生1,(本科生1,…,本科生m1)),(研究生2,(本科生1,…,本科生m2))…))导师不带研究生(老师,(本科生1,…,本科生m))导师的自然情况只包括姓名、职称;研究生的自然情况只包括姓名、班级;本科生的自然情况只包括姓名、班级。2.数据结构设计(1)魔方阵structstudent{charid[10];charname[10];intscore;structstudent*next;};(2)本科生导师制问题typedefstructGLNode{charname[100];/*教师或学生的姓名*/charprof[100];/*教师结点表示职称,学生结点表示班级*/inttype;/*结点类型:0-教师,1-研究生,2-本科生*/struct{structGLNode*hp,*tp;}ptr;/*hp指向同级的下一结点,tp指向下级的首结点*/}GList;3.算法设计(1)魔方阵由1开始填数,将1放在第0行的中间位置。将魔方阵想象成上下、左右相接,每次往左上角走一步,会有下列情况:左上角超出上方边界,则在最下边相对应的位置填入下一个数字;左上角超出左边边界,则在最右边相应的位置填入下一个数字;如果按上述方法找到的位置已填入数据,则在同一列下一行填入下一个数字。(2)本科生导师制问题建立:建立导师广义表。插入:将某位本科生或研究生插入到广义表的相应位置。删除:将某本科生或研究生从广义表中删除。查询:查询导师、本科生(研究生)的情况。统计:某导师带了多少个研究生和本科生。输出:将某导师所带学生情况输出。退出:程序结束。4.界面设计(1)魔方阵(2)本科生导师制问题5.运行、测试与分析(1)魔方阵:(2)本科生导师制问题6、源代码:(1)魔方阵:#includeiostreamintmain(){inta[100][100]={0};intn,i,x,y;printf(PleaseInputN=);doscanf(%d,&n);while((n%2==0)||(n99)||(n3));x=1;y=n/2+1;a[x][y]=1;for(i=2;i=n*n;i++){x=x-1;y=y+1;if((x+1==1)&&(y-1==n)){x=2;y=n;}if(x==0)x=n;if(y==n+1)y=1;if(a[x][y]!=0){y=y-1;x=x+2;}a[x][y]=i;}for(x=1;x=n;x++){for(y=1;y=n;y++)printf(%4d,a[x][y]);printf(\n);}system(pause);}(2)本科生导师制问题#includeiostreamvoidmenu(){printf(*********************************************************************\n);printf(1.%35s\n,建立广义表);printf(2.%35s\n,插入学生);printf(3.%35s\n,删除学生);printf(4.%35s\n,查询信息);printf(5.%35s\n,统计导师的研究生,本科生人数);printf(6.%35s\n,输出广义表);printf(7.%35s\n,退出);printf(*********************************************************************\n);}intmain(intargc,char*argv[]){typedef*head;charstr[100];intchoice;while(1){menu();printf(请输入你要选择的序号:\n);scanf(%d,&choice);switch(choice){case1:{printf(请输入你想建立的标准广义表,例如:((高老师-教授-0,(李平-一班-2,杨梅-二班-2)),(李平-博士-0,(李平-三班-1,(李平-四班-2))))\n);scanf(%s,str);head=glistcreate(str);}break;case2:head=studentinsert(head);break;case3:head=studentdelete(head);break;case4:enquire(head);break;case5:studentcount(head);break;case6:glistprint(head);break;case7:return0;}}return0;}glist*glistcreate(char*str){glist*head,*p,*q,*m,*a;inti=0,j=0,flag=0,flag1=0,flag2=0,len=strlen(str);head=p=q=m=a=NULL;while(ilen){if(str[i]==')'||str[i]=='('||str[i]==','){i++;continue;}else{if(!(m=(glist*)malloc(sizeof(glist))))exit(1);for(j=0;str[i]!='-';)m-name[j++]=str[i++];m-name[j]='\0';for(j=0,++i;str[i]!='-';)m-prof[j++]=str[i++];m-prof[j]='\0';m-type=str[++i]-48;m-ptr.hp=m-ptr.tp=NULL;i++;if(m-type==0){if(flag){p-ptr.hp=m;p=m;}else{head=p=m;flag=1;}flag1=0;a=q=m;}elseif(m-type==1){if(flag1){q-ptr.hp=m;q=m;}else{q-ptr.tp=m;q=m;flag1=1;}flag2=0;a=m;}else{if(flag2){a-ptr.hp=m;a=m;}else{a-ptr.tp=m;a=m;flag2=1;}}}}returnhead;}voidglistprint(glist*head){glist*p,*q,*a;intflag=0,flag1=0,flag2=0;p=head;printf(();while(1){if(p==NULL)break;if(flag)printf(,(%s-%s-%d,p-name,p-prof,p-type);else{printf((%s-%s-%d,p-name,p-prof,p-type);flag=1;}q=p-ptr.tp;flag2=flag1=0;while(1){if(q==NULL)break;if(flag1)if(q-type==1)printf(,(%s-%s-%d,q-name,q-prof,q-type);elseprintf(,%s-%s-%d,q-name,q-prof,q-type);else{printf(,(%s-%s-%d,q-name,q-prof,q-type);flag1=1;}a=q-ptr.tp;flag2=0;while(1){if(a==NULL)break;if(flag2)printf(,%s-%s-%d,a-name,a-prof,a-type);else{printf(,(%s-%s-%d,a-name,a-prof,a-type);flag2=1;}a=a-ptr.hp;}if(flag2)printf());if(q-type==1||(q-ptr.hp==NULL))printf());q=q-ptr.hp;}printf());p=p-ptr.hp;}printf()\n);}glist*studentinsert(glist*head){charslen[100],teacher[100],graduate[100];glist*Slen,*p,*q;inti,j;p=head;printf(请输入待插入学生的信息,如:李刚-二班-1\n);scanf(%s,slen);if(!(Slen=(glist*)malloc(sizeof(glist))))exit(1);for(i=0,j=0;slen[i]!='-';)Slen-name[j++]=slen[i++];Slen-name[j]='\0';for(j=0,++i;slen[i]!='-';)Slen-prof[j++]=slen[i++];Slen-prof[j]='\0';Slen-type=slen[++i]-48;Slen-ptr.hp=Slen-ptr.tp=NULL;if(Slen-type==2){printf(请输入所属导师\n);scanf(%s,teacher);while(strcmp(p-name,teacher)){p=p-ptr.hp;if(p==NULL)break;}if(p==NULL)printf(不存在此导师\n);else{if(p-ptr.hp==NULL||p-ptr.tp-type==2){Slen-ptr.hp=p-ptr.tp;p-ptr.tp=Slen;printf(插入成功\n);}else{printf(请输入所属研究生\n);scanf(%s,graduate);q=q-ptr.tp;while(strcmp(q-name,graduate)){q=q-ptr.hp;if(q==NULL)break;}}if(q==NULL)printf(该研究生不存在,不能插入\n);else{Slen-ptr.hp=q-ptr.tp;q-ptr.tp=Slen;printf(插入成功\n);}}}else{printf(请输入所属导师:\n);scanf(%s,teacher);while(strcmp(p-name,teacher)){p=p-ptr.hp;if(p==NULL)break;}if(p==NULL)printf(不存在此导师\n);else{if(p-ptr.tp==NULL||p-ptr.tp-type==1){Slen-ptr.hp=p-ptr.tp;p-ptr.tp=Slen;printf(插入成功\n);}else{Slen-ptr.tp=p-ptr.tp;p-ptr.tp=Slen;}}}printf(\n);returnhead;}glist*studentdelete(glist*head){charslen[100];glist*Slen,*p,*q,*a,*m;inti,j;intflag=0;charch;p=head;printf(请输入待删除学生信息,如李刚-二班-1\n);scanf(%s,slen);if(!(Slen=(glist*)malloc(sizeof(glist))))exit(1);for(i=0,j=0;slen[i]!='-';)Slen-name[j++]=slen[i++];Slen-name[j]='\0';f

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功