完整word版华仔数据结构实验报告.docx
- 文档编号:7760762
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:16
- 大小:124.25KB
完整word版华仔数据结构实验报告.docx
《完整word版华仔数据结构实验报告.docx》由会员分享,可在线阅读,更多相关《完整word版华仔数据结构实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
完整word版华仔数据结构实验报告
本科实验报告
课程名称:
数据结构
实验项目:
线性结构、树形结构、图结构、查找、排序
实验地点:
专业班级:
学号:
学生姓名:
指导教师:
2011年12月24日
实验项目:
线性结构
实验目的和要求
熟练掌握线性结构的基本操作在顺序表和链式表上的实现。
二、实验内容和原理
设顺序表递增有序,编写一个程序,将x插入,使之仍然有序。
三、主要仪器设备
使用的计算机:
Nopated++
四、操作方法与实验步骤
#include
#definemaxlen50
typedefintelemtype;
typedefelemtypesqlist[maxlen];
intcreat(sqlistA)
{
inti,n;
printf("Pleaseinputlength:
\n");
scanf("%d",&n);
for(i=0;i { printf("Pleaseinput%dthelement\n",i+1); scanf("%d",&A[i]); } returnn; } voiddisp(sqlistA,intn) { inti; if(n==0) printf("ThelistisNULL: \n"); for(i=0;i printf("%4d",A[i]); printf("\n"); } intInsert(sqlistA,intn,intx) { inti=0,j; if(x>=A[n-1]) { A[n]=x; } else { while(A[i] i++; for(j=n;j>=i;j--) A[j+1]=A[j]; A[i]=x; } returnn+1; } voidmain() { sqlistA; intx,n; n=creat(A); disp(A,n); printf("Pleaseinputyouwanttoinsert: \n"); scanf("%d",&x); n=Insert(A,n,x); disp(A,n); } 五、实验数据记录和处理 六、实验结果与分析 这个程序为比较基础的程序 七、讨论、心得 该程序可以帮助我加深对线性表的理解,引发我对数据结构这门课的兴趣 实验项目(树结构) 一、实验目的和要求 熟悉各种表示方法和便利方式,掌握有关算法,了解树在计算机科学中的应用。 二、实验内容和原理 编写递归算法,计算二叉树中的叶子节点数目 三、主要仪器设备 使用的计算机: nopated++ 四、操作方法与实验步骤 #include #include #definemax10 typedefstructnode{ chardata; node*lchild,*rchild; }Bitree; Bitree*B[max]; Bitree*Creatree(){//建立二叉树 Bitree*T,*S; charch; intfront,rear,sign; sign=0; front=0; rear=-1; T=NULL; printf("建立二叉树: \n"); ch=getchar(); while(ch! ='#'){ if(ch! ='@'){//输入结点不是虚结点 S=(Bitree*)malloc(sizeof(Bitree)); S->data=ch; S->lchild=S->rchild=NULL; rear++; B[rear]=S; if(rear==front){ T=S; sign++; } else{ if(sign%2==1)//寻找父结点 B[front]->lchild=S; if(sign%2==0){ B[front]->rchild=S; front++; } sign++; } } else{//输入结点为虚结点 if(sign%2==0) front++; sign++; } ch=getchar(); } returnT; } intSearchleaf(Bitree*T){//计算叶子数 if(T==NULL) return0; elseif(T->lchild==NULL&&T->rchild==NULL) return1; elsereturn(Searchleaf(T->lchild)+Searchleaf(T->rchild)); } voidvisit(Bitree*T){ printf("%c\n",T->data); } voidInorder(Bitree*T){//中序遍历二叉树 if(T! =NULL){ Inorder(T->lchild); visit(T); Inorder(T->rchild); } } voidmain(){ Bitree*T; T=Creatree(); printf("中序遍历: \n"); Inorder(T); printf("叶子数%d\n",Searchleaf(T)); } 五、实验数据记录和处理 。 六、实验结果与分析 这个程序让我加深了对中序遍历二叉树的理解 七、讨论、心得 树是常用的数据结构要加深理解掌握它 实验项目(图结构) 1、实验目的和要求 熟悉图的存储结构,掌握有关算法的实现,了解图在软件中的应用。 二、实验内容和原理 基于深度优先算法编写程序,判别该有向图中是否存在vi到vj的路径。 三、主要仪器设备 使用的计算机: nopated++ 四、操作方法与实验步骤 #include #include intn; 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; intkey1,key2; intnum=0; structArcNode*p; structVNode*temp; structVNode*flag; printf("该有向图有多少个顶点: \n"); scanf("%d",&n); while(n<1){ printf("你输入的值不合理,请重新输入: \n"); scanf("%d",&n); } p=(structArcNode*)malloc(n*sizeof(structArcNode)); for(i=0;i printf("请输入以V%d为弧尾的所有弧,并以-1结束输入\n",i+1); scanf("%d",&k); if(k==-1){ 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! =-1){ temp=(structVNode*)malloc(sizeof(structVNode)); temp->position=k; temp->next=NULL; flag->next=temp; flag=temp; scanf("%d",&k); } } } printf("请输入要判断的两顶点的位置: \n"); scanf("%d%d",&key1,&key2); //以下代码用来判断是否连通 DFS(p,(p+key1)); if(p[key2].mark==1){ printf("V%d和V%d是连通的! \n",key1+1,key2+1); } else{ p[key1].mark=0; DFS(p,(p+key2)); if(p[key1].mark==1){ printf("V%d和V%d是连通的! \n",key1+1,key2+1); } else{ printf("V%d和V%d不是连通的! \n",key1+1,key2+1); } } system("pause"); return0; } 五、实验数据记录和处理 六、实验结果与分析 在调试和运行中,发现了很多错误,经过反复修改,终于能运行。 七、讨论、心得 由于这个程序较为复杂,程序代码也比较长,编写程序时遇到了不少的困难,经过不懈努力,对于图有了更深的认识。 实验项目(查找) 1、实验目的和要求 掌握查找表上的有关查找方法,并分析时间复杂度。 二、实验内容和原理 在二叉树中查找关键字为key的记录 三、主要仪器设备 使用的计算机: nopated++ 四、操作方法与实验步骤 #include"stdio.h" #include"stdlib.h" #include"conio.h" structnode { intdata; structnode*lchild,*rchild; }; voidMiddleOrder(structnode*q) {if(q! =NULL) {MiddleOrder(q->lchild); printf("%d",q->data); MiddleOrder(q->rchild); } } voidInsertNode(structnode*p,structnode*pn) { if(pn->data { if(p->lchild==NULL) p->lchild=pn; else InsertNode(p->lchild,pn); } else { if(p->rchild==NULL) p->rchild=pn; else InsertNode(p->rchild,pn); } } structnode*CreateBinSortTree() { intx; structnode*t; structnode*s; t=NULL; printf("请输入有序表,输入-1时结束。 \n"); scanf("%d",&x); while(x! =-1) {s=(structnode*)malloc(sizeof(structnode)); s->data=x; s->lchild=s->rchild=NULL; if(t==NULL) t=s; else InsertNode(t,s); scanf("%d",&x); } return(t); }structnode*bstsearch(structnode*t,intx) { while(t! =NULL) { if(x==t->data)returnt; else { if(x elset=t->rchild; } } returnNULL; } intmain() {intq; structnode*root; root=CreateBinSortTree(); printf("请输入需要找的关键字"); scanf("%d",&q); MiddleOrder(root); if(bstsearch(root,q)! =NULL) printf("\n找到关键字%d\n",q); else printf("\n没有找到关键字%d\n",q); printf("\n"); getch(); } 五、实验数据记录和处理 六、实验结果与分析 程序一开始有大量错误,大量修改后可以运行 七、讨论、心得 动态查找表掌握不够深刻导致很多困难 实验项目(排序) 1、实验目的和要求 掌握线性表排序的方法,分析时间复杂度。 二、实验内容和原理 对N个关键字取整数的记录进行整序,以使所有关键字为非负数的记录排在关键字为负数的记录之前,要求使用最少的附加空间,,且算法的时间复杂度为O(N)。 三、主要仪器设备 使用的计算机: nopated++ 四、操作方法与实验步骤 #include"stdio.h" #include"conio.h" main() {inti,k=0,n,t,a[100]; printf("请输入关键字个数"); scanf("%d",&n); printf("请输入关键字"); for(i=0;i scanf("%d",&a[i]); for(i=0;i if(a[i]>=0) {t=a[k];a[k]=a[i];a[i]=t;k++;} for(i=0;i printf("%-3d",a[i]); getch(); } 五、实验数据记录和处理 六、实验结果与分析 程序可以运行 七、讨论、心得 通过本次试验,对排序过程加深了解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 版华仔 数据结构 实验 报告