ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:19.84KB ,
资源ID:12692042      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12692042.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《数据结构》实训报告.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

《数据结构》实训报告.docx

1、数据结构实训报告实验一 线性表1. 实验要求1.1掌握数据结构中线性表的基本概念。1.2熟练掌握线性表的基本操作:创建、插入、删除、查找、输出、求长度 及合并并运算在顺序存储结构上的实验。1.3熟练掌握链表的各种操作和应用。2. 实验内容2.1 编写一个函数,从一个给定的顺序表 A 中删除元素值在 x 到 y 之间的所 有元素,要求以较高效率来实现。2.2 试写一个算法,在无头结点的动态单链表上实现线性表插入操作2.3设计一个统计选票的算法,输出每个候选人的得票结果。3. 实验代码2.1 代码:#includetypedef int elemtype;#define maxsize 10int

2、 del(int A,int n,elemtype x,elemtype y)int i=0,k=0;while(i=x&Ai=y)k+;elseAi-k=Ai;i+;return(n-k);void main()int i,j;int amaxsize;Printf(输入 d 个数:n,maxsize);for(i=0;imaxsize;i+)scanf(%d,&ai);j=del(a,maxsize,1,3);Printf(输出删除后剩下的数:n);for(i=0;idata=x;S-n ext=L;L=s;elseP=L;j=1;WhiIe(P&jn ext;if(pji-1) retu

3、rn error;S=(Li nklist)malloc(sizeof(L no de); s-data=x;S-n ext=p-n ext;P-n ext=s;2.3代码:typedef int elemtypetypedef StrUCt IinknOdeelemtype data;StrUCt IinknOde *n ext;no detype;no detype *create()elemtype d;n OdetyPe h=NULL,*s,*t;int i=1;Printf(建立单链表:n);while(1)Printf(输入第%d个结点数据域,i);SCan f(%d,&d);if

4、(d=O)break;if(i=1)h=(no detype *)malloc(sizeof( no detype); h-data=d;h-n ext=NULL;t=h;elses=(no detype *)malloc(sizeof( no detype); s-data=d;S-n ext=NULL;t- n ext=s; t=s;i+;return h;void Sat (no detype *h,i nt a)no detype *p=h;WhiIe(P!=NULL)ap-data+;P=P-n ext;void mai n()int aN+1,i;for(i=0;iN;i+)ai=

5、0;no detype *head;head=create();sat(head,a);Printf(候选人:); for(i=1;i=N;i+) Printf(%3d,i); Printf(n 得票数 n);for(i=1;i=N;i+)Prin tf(%3d,ai);Prin tf(n);4.实验小结线性表是最简单的、最常用的一种数据结构,是实现其他数据结构的基础实验二 栈与队列1.实验要求1.1 了解栈和队列的特性,以便灵活运用。1.2熟练掌握栈和有关队列的各种操作和应用。2.实验内容2.1设一个算术表达式包括圆括号,方括号和花括号三种括号,编写一个算 法判断其中的括号是否匹配。3.实验

6、代码2.1代码:#i nclude#i nclude#i nclude#defi ne NULL 0typedef StrUCt listChar str;StrUCt list *n ext;list;void PUSh(Char,list *);int POP(Char.list *);void deal(char *str);mai n(void)Char str20;Printf(n请输入一个算式:n);gets(str);deal(str);Printf(正确!);getchar();return 0;void deal(char *str)list *L;L=(IiSt *)mal

7、loc(sizeof(list);if(!L)Printf(错误!);exit(-2);L- next=NULL;while(*str)if(*str=(*str=*str=) push(*str,L);elseif(*str=)*str=*str=) if(pop(*str,L) puts(错误请检查!); puts(按回车键退出); getchar();exit(-2);sM+;if(L- next)PUtSe错误,请检查!);puts(按任意键退出);getchar();exit(-2);void PUSh(Char c,list *L)list *p;P=(IiSt *)malloc(

8、sizeof(list);if(!p)Printf(错误!);exit(-2);p-str=c;p-n ext=L-n ext;L-n ext=p;#define CheCk(S) if(L-next-str=s)p=l-next;L-next=p-next;free(p);return(0); int POP(Char c,list *L)list *p;if(L- next=NULL)return 1;SWitCh(C)case):check() break;CaSe:CheCk(T) break;case:check() break;return 1;4.实验小结栈和队列是最基础的一种数

9、据结构之一,为实现其他数据结构的奠定基石实验三树1.实验要求1.1掌握二叉树,二叉树排序数的概念和存储方法。1.2掌握二叉树的遍历算法。1.3熟练掌握编写实现树的各种运算的算法。2.实验内容2.1编写程序,求二叉树的结点数和叶子数。2.2编写递归算法,求二叉树中以元素值为 X的结点为根的子数的深度2.3编写程序,实现二叉树的先序,中序,后序遍历,并求其深度。3.实验代码2.1代码:#i nclude#i ncludeStrUCt no deChar data;StrUCt node *lchild,*rchild;bno de;typedef StrUCt node *bli nk;bli n

10、k CreatObli nk bt;Char ch;ch=getchar();if(ch= ) return(NULL);elsebt=(struct node *)malloc(sizeof(b no de); bt-data=ch;bt-lchild=creat();bt-rchild=creat();return bt;int n=0 ,n 1=0;void PreOrder(bli nk bt)if (bt)n+;if(bt-lchild=NULL&bt-rchild=NULL) n 1+;PreOrder(bt-lchild);PreOrder(bt-rchild);void mai

11、 n()bli nk root;root=creat();PreOrder(root);Printf(此二叉数的接点数有:%dn,n);Printf(此二叉数的叶子数有:%dn,n1);2.2代码:int get_deep(bitree T,i nt x) _if(T-data=x)Prin tf(%dn,get_deep(T); exit 1;elseif(T-lchild)get_deep(T-lchild,x); if(T-rchild)get_deep(T-rchild,x); _int get_depth(bitree T) _if(!T)return 0;else m=get_de

12、pth(T-lchild); n=get_depth(T-rchild);return(m n?m:n )+1;2.3代码:#i nclude#i ncludeStrUCt no deChar data;StrUCt node *lchild,*rchild;bno de;typedef StrUCt node *bli nk;bli nk Creatobli nk bt;Char ch;ch=getchar();if(ch= ) return(NULL);elsebt=(struct node *)malloc(sizeof(b no de); bt-data=ch;bt-lchild=cr

13、eat();bt-rchild=creat();return bt;void PreOrder(bli nk bt)if (bt)Prin tf(%c,bt-data);PreOrder(bt-lchild);PreOrder(bt-rchild);void ino rder(bli nk bt)if(bt)ino rder(bt-lchild);Prin tf(%c,bt-data);ino rder(bt-rchild);void postorder(bli nk bt)if(bt)postorder(bt-lchild);postorder(bt-rchild);Prin tf(%c,b

14、t-data);int max(i nt x,i nt y)if(xy)return x;elsereturn y;int depth(bli nk bt)if (bt)retur n 1+max(depth(bt-lchild),depth(bt-rchild);else return 0;VOid mai n()bli nk root;root=creat();Prin tf(n);Printf(按先序排列:);PreOrder(root);Pri ntf( n);Printf(按中序排列:);ino rder(root);Pri ntf( n);Printf(按后序排列:);Postor

15、der(root);Pri ntf( n);Printf(此二叉数的深度是:);Prin tf(depth=%dn,depth(root);4.实验小结通过本章学习实验,对树有了初步的认识。树就是一种非线性的数据结构, 描述了客观世界中事物之间的层次关系。这种结构有着广泛的应用,一切具 有层次关系的问题都可以用树来表示。实验四图1.实验要求1.1熟悉图的各种存储方法。1.2掌握遍历图的递归和非递归的算法。1.3理解图的有关算法。2.实验内容2.1写出将一个无向图的邻接矩阵转换成邻接表的算法2.2以邻接表作存储结构,给出拓扑排序算法的实现。3.实验代码2.1代码:VOid mattolist(i

16、nt a,adjlist b,int n) /*n 为图的结点个数 */for(i=0;in;i+)bi.firstarc=NULL; /* 邻接表置空 */for(i=0;i=0;j-)if(aij!=0)p=(arcnodetp *)malloc(sizeof(arcnodetp);/* 产生邻接点 */ p-adjvex=j;p-n extare=bi.firstare;bi.firstarc=p;2.2代码: typedef StrUCt VeX nodeVerteXTyPe vertex;int in;/*增加一个入度域*/AreCNOdeTP * fristarc;AdjListv

17、 num;typedef StrUCt graphAdjLiSt adjlist;int VeX nu m,arc num;GraphTp;Top_SOrt(GraPh TP g)LStaCkTP *p;/*建立入度为O的顶点栈S*/int m,i,v;ini tStack(S);for(i=0;ivPrintf(%d,v);/* 输出 v*/m+;p=g.adjlisti.fristarc;/*P=图 g 中顶点 V 的第一个邻接点 */WhiIe(P!=NULL)/p 存在(g.adjlistp-adjvex.in)-;/*P 的入度-*/ if(g.adjlistp-adjvex.i n

18、=0)*if(p 的入度=0)*/PUSh(S,p-adjvex);/*P 入 S 栈*/p=p-nextarc;/*P=图g中的顶点V的下一个邻接点*/if(m#include VString.h#defi ne MAXNUM 20int input(int *);/* 输入数据 */int SearCh(int *,int,int);/* 查找插入位置 */void plug(int *,int,int);/* 插入数据 */void main (VOid)int dataMAXNUM,m;int in Sert=1;m=i nput(data);Prin tf(I nput the in

19、 Sert nu m:);SCan f(%d,data);inSert=SearCh(data,1,m);/*返回插入位置 */plug(data,i nsert,m);for(insert=1;insert=m+1;insert+)/* 显示数据 */Prin tf(%3d,*(data+i nsert);getch();int in put(i nt *data)int i,m;Prin tf( nln PUt the max nu m:);SCan f(%d,&m);Prin tf(i nput datan);for(i=1;ihigh) return low;/*没有找到插入数据,返回

20、low*/ elsemid*/mid=(low+high)2;if(*(data+mid)=*data) retun mid;/* 找到插入数据,返回else if(*(data+mid)*data)SearCh(data,low,high);void plug(i nt *data,i nt in sert,i nt m)int i;for(i=m;ii nsert;i-)*(data+i+1)=*(data+i);(data+in Sert)=*data2.2代码:#i nclude VStdiO.h#in elude VCOni o.h#include #definr N 18 /* 元

21、素个数 */#defi nr Block num 3 /* 分块数 */typedef StrUCt in dextermint key;/*最大关键字*/int addr;/*块的起始地址*/index; /*索引表数据类型*/index * CreateList(int data,int n)/* 建索引表 */in dex *p;int m,j,k;m=n/BlockNum;/*分为BlockNum块,每块有 m个元素*/p=(i ndex *)malloc(BlockNum *sizeof(i ndex);for(k=O;kkey=dat am*k;(p+k)-addr=m*k;for

22、(j=m*k;j(p+k)-key)(p+k)-key=dataj;/* 块的最大关键字 */return p;int BlockSearch(index *list,int rectab,int n,int m,int k)/* 分块查找 */int low=0,high=m-1,mid,i;int b=n/m;/*每块有b个元素*/WhiIe(IOWV=high)* 块间折半查找 */mid=(low+high)2;if(list+mid)-key=k)high=mid+1;else low=mid+1;if(lowaddr;iadder+b-1 &rectabi!=k;i+);if(ia

23、ddr+b-1)return i;else return -1;return -1;void main()in t recordN=22,12,13,8,9,20,33,42,44,38,24,48,60,58,74,49,86,53;int key;in dex *list;Prin tf(please in PUt key:n);SCa nf(%d,&key);IiSt=CreateLiSt(record,N);Prin tf(data postion id %dn,BlockSearch(list,record,N,BlockNum,key);4.实验小结通过本章的学习,对排序有较高层次的理解与认识,从平时的练习中可以 看出排序是数据处理中经常用到的重要运算。 有序的顺序表可以采用查找 效率较高的折半查找法,而无序的顺序表只能用效率较低的顺序查找法。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1