《数据结构》实验报告专业:软件工程班级:13XX班姓名:XXX2014年12月太原理工大学学生实验报告学院名称软件学院专业班级软件13XX班学号201300XXXX实验成绩学生姓名XXX同组人姓名实验日期11.12课程名称数据结构实验题目实验一线性表实验记录:1.设顺序表A中的数据元素递增有序,试写一程序,将x插入到顺序表的适当位置上,使该表仍然有序。程序代码:#includestdio.h#includestdlib.h#defineLIST_INIT_SIZE10#defineLISTINCREMENT2#defineOVERFLOW-2#defineOK1#defineERROR0typedefstruct{int*elem;intlength;intlistsize;}SqList,*QSqList;intInitList_Sq(SqList*L){L-elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));if(!L-elem)exit(OVERFLOW);L-length=0;L-listsize=LIST_INIT_SIZE;returnOK;}intGetListElem(SqList*L,inti,int*q){if(i1||i(L-length))exit(ERROR);*q=L-elem[i-1];returnOK;}intListInsert_Sq(SqList*L,inti,inte){int*q,*p;if(i1||iL-length+1)returnERROR;if(L-length=L-listsize){int*newbase;newbase=(int*)realloc(L-elem,(L-listsize+LISTINCREMENT)*sizeof(int));if(!newbase)exit(OVERFLOW);L-elem=newbase;L-listsize+=LISTINCREMENT;}q=&(L-elem[i-1]);for(p=&(L-elem[L-length-1]);p=q;--p)*(p+1)=*p;*q=e;++L-length;returnOK;}intInserOrderList(SqList*L,inte){inti;if((L-length)=(L-listsize)){int*newbase;newbase=(int*)realloc(L-elem,(L-listsize+LISTINCREMENT)*sizeof(int));if(!newbase)exit(OVERFLOW);L-elem=newbase;L-listsize+=LISTINCREMENT;}for(i=L-length;i0&&e(L-elem[i-1]);i--)L-elem[i]=L-elem[i-1];L-elem[i]=e;L-length++;returnOK;}voidmain(){inti,x,e;int*y=&x;SqListSq;QSqListsq=&Sq;InitList_Sq(sq);printf(请按从小到大的顺序输入10个数字:);for(i=1;i=10;i++){scanf(%d,&x);ListInsert_Sq(sq,i,x);}printf(请输入要插入的数字:);scanf(%d,&e);InserOrderList(sq,e);printf(输出排序后的元素:);for(i=1;i=Sq.length;i++){GetListElem(sq,i,y);printf(%d,x);}printf(\n);free(Sq.elem);}程序运行结果:心得体会:做完这个实验,个人感觉有点难,但是仔细去思考,通过书上的内容还是可以理解的,在做线性表这些实验时,最需要的就是耐心和细心,写完每一个函数,都应该去运行调试,这样才能保证每一步都做对,要有耐性。实验室名称行知楼A104指导教师签名:王丹太原理工大学学生实验报告学院名称软件学院专业班级软件13XX班学号201300XXXX实验成绩学生姓名XXX同组人姓名实验日期11.26课程名称数据结构实验题目实验二树实验记录:1.编写递归算法,计算二叉树中叶子结点的数目。程序代码:#includestdio.h#includemalloc.hintcount=0;structnode{charinfo;structnode*llink,*rlink;};typedefstructnodeNODE;NODE*creat(){charx;NODE*p;scanf(%c,&x);printf(%c,x);if(x!='.'){p=(NODE*)malloc(sizeof(NODE));p-info=x;p-llink=creat();p-rlink=creat();}elsep=NULL;returnp;}voidrun(NODE*t){if(t){run(t-llink);run(t-rlink);printf(%c,t-info);if(((t-llink)==NULL)&&((t-rlink)==NULL))count++;}}voidmain(){NODE*T;printf(请输入一个二叉树:\n);T=creat();printf(\n);if(!T)printf(Thisisaemptybinarytree.);else{printf(Theresultofposttraveseis:\n);run(T);}printf(\n二叉树中叶子结点的数目为:%d,count);printf(\n);}运行结果:心得体会:这次的实验相对于上一次的实验来说要难一些,程序的语法要求更高。最终还是写出来了,感觉很不错。尤其是一些语法错误搞的焦头烂额,后来用了很长的时间才搞定,以后还是要多多写代码做题,否则只懂思想不懂怎么写出来也没有什么用,而且从其中发现了很多知识盲点,正所谓“实践出真知”。实验室名称行知楼A104指导教师签名:王丹太原理工大学学生实验报告学院名称软件学院专业班级软件13XX班学号201300XXXX实验成绩学生姓名XXX同组人姓名实验日期12.10课程名称数据结构实验题目实验三图实验记录:程序代码:#includestdio.h#includemalloc.h#includestdlib.hintn;structVNode{intposition;structVNode*next;};structArcNode{intmark;structVNode*first;};voidDFS(structArcNode*v,structArcNode*w){structVNode*L;w-mark=1;L=w-first;while(L!=NULL){if((v+(L-position))-mark==0){DFS(v,(v+L-position));}L=L-next;}}intmain(){inti,j,k;intnum=0;structArcNode*p;structVNode*temp;structVNode*flag;printf(请输入无向图的顶点个数:\n);scanf(%d,&n);while(n1){printf(你输入的值不合理,请重新输入:\n);scanf(%d,&n);}p=(structArcNode*)malloc(n*sizeof(structArcNode));for(i=0;in;i++){printf(请输入以V%d为弧尾的所有弧,并以0结束输入\n,i+1);scanf(%d,&k);if(k==0){p[i].mark=0;p[i].first=NULL;}else{temp=(structVNode*)malloc(sizeof(structVNode));temp-position=k;temp-next=NULL;p[i].first=temp;p[i].mark=0;flag=temp;scanf(%d,&k);while(k!=0){temp=(structVNode*)malloc(sizeof(structVNode));temp-position=k;temp-next=NULL;flag-next=temp;flag=temp;scanf(%d,&k);}}}i=0;while(p[i].mark==0){DFS(p,(p+i));num++;i=0;while(p[i].mark!=0&&in){i++;}}printf(此图的连通分量个数为:%d\n,num);system(pause);return0;}运行结果:心得体会:不管学哪门语言,都得手脑结合,平时课上会了不一定真的掌握了,还得自己下来一个一个上机操作验证,才能更好的将所学的知识融会贯通,就像这次的图,觉得自己会了,但其实存在很多知识点存在盲区,有后一定多动手多实践。实验室名称行知楼A104指导教师签名:王丹太原理工大学学生实验报告学院名称软件学院专业班级软件13XX班学号201300XXXX实验成绩学生姓名XXX同组人姓名实验日期12.31课程名称数据结构实验题目实验四查找实验记录:程序代码:#includestdio.h#includeconio.h#includemalloc.htypedefstructnode{charkey;structnode*l,*r;}NODE;voidtree(NODE*T,charx){NODE*p,*q;if(T-key==NULL){T-key=x;return;}p=(NODE*)malloc(sizeof(NODE));p-key=NULL;p-l=NULL;p-r=NULL;if(xT-key){q=T-r;if(!q)T-r=p;q=T-r;}else{q=T-l;if(!q)T-l=p;q=T-l;}tree(q,x);}staticintm=0;staticinto=0;staticintn=0;staticints=0;voidrun(NODE*T,charz){if(T-key)m++;elsereturn;if(T-key==z){o=1;return;}else{if(T-l)run(T-l,z);if(o==0&&T-r)run(T-r,z);if(m==n)s=1;}}voidwrite(NODE*T){if(!T)return;elseprintf(%c,T-key);write(T-l);write(T-r);}voidmain(){inti;charx;charz;NODE*T;T=(NODE*)malloc(sizeof(NODE));T-key=NULL;T-l=NULL;T-r=NULL;printf(inputn(节点个数):);scanf(%d,&n);do{printf(inputtree(输入节点):\n);for(i=0;in;i++){scanf(%c,&x);while(x=='\n'||x=='')scanf(%c,&x);tree(T,x);}}while(i!=n);printf(生成的二叉排序树为(先序):);write(T);printf(\n);printf(findwhat:);scanf(%c,&z);while(z=='\n'||z=='')scanf(%c,&z);run(T,z);if(s==0)printf(%c在先序遍历的第%d位.\n,z,m);elseprintf(没找到%c.,z);getch();}运行结果:心得体会:虽然说已经亲自上机敲过不少代码了,但发现在编程的时候还犯了一些错误。比方说有时候在行尾,忘记加分号。