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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验报告.docx

1、数据结构实验报告数据结构实验报告专业:软件工程班级:姓名:2014年12月太原理工大学学生实验报告学院名称软件学院专业班级学号实验成绩学生姓名同组人姓名无实验日期课程名称数据结构实验题目线性表实验记录:1目的与要求 主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。2主要仪器设备C,计算机。3实验内容 问题描述设顺序表A中的数据元素递增有序,试写一程序,将x插入到顺序表的适当位置上,使该表仍然有序。 输入有序表的元素个数,有序表的元素,要插入的值。 输出插入值后的有序表。 存储结构链式存储结构。 算法的基本思想 首先找到需要插入元素的位

2、置,然后进行链表的插入操作即可。四源程序#include #includetypedef int ElemType;#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct ElemType *elem; int length; int listsize;SqList;/构造空表void InitList_Sq(SqList &L) L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!L.elem) exit(-2); L.length=0; L.li

3、stsize=LIST_INIT_SIZE;实验室名称指导教师签名:/输入递增有序顺序表void putseqList(SqList &L,int n) int i; for(i=0;i0&L.elemi=L.listsize) ElemType *newbase=(ElemType*)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType); if(!newbase)exit(-2); L.elem=newbase; L.listsize+=LISTINCREMENT; for(i=0;iL.elemi); else break;

4、 q=&(L.elemi); for(p=&(L.elemL.length-1);p=q;-p)*(p+1)=*p; *q=x; L.length+; return 1;/输出元素int OutputSqList(SqList &L) int i; for(i=0;i=L.length-1;i+) printf(%d,L.elemi); return 0;void main() int s,b; SqList A; InitList_Sq(A); printf(请输入顺序表长度); scanf(%d,&s); printf(请输入顺序表); putseqList(A,s); printf(请输

5、入要插入的值); scanf(%d,&b); ListInsert_Sq(A,b); printf(插入后的顺序表为); OutputSqList(A); printf(n);五、实验结果与分析可以看到4成功的插入了有序表中,若输入的不是一个有序表,则程序会提示,然后退出程序。6、实验心得及体会第一次做数据结构的实验,对链表的操作还不太熟悉,花了相当长的时间在插入的那一段函数上,同时由于对C语言中结构体的不熟悉,在为变量申请空间时也发生了不少错误,但最终还是把程序写了出来。数据结构实验报告专业:班级:姓名:2014年12月太原理工大学学生实验报告学院名称软件学院专业班级学号实验成绩学生姓名同组

6、人姓名无实验日期课程名称数据结构实验题目树实验记录:一目的与要求熟悉树的各种表示方法和各种遍历方式,掌握有关算法的实现,了解树在计算机科学及其它工程技术中的应用。4主要仪器设备C,计算机。5实验内容 问题描述编写递归算法,计算二叉树中叶子结点的数目。 输入按照线序遍历输入一颗二叉树,若其子树为空则用0替代。 输出二叉树的叶子结点数目。 存储结构二叉链表存储。算法的基本思想首先建立根节点,然后通过递归算法建立左右子树,直到其子树为空,当其左右子树都为空时,为叶子结点,一次遍历,统计出左右子树为空的结点数目,为叶子结点数目。四源程序#include#include struct node char

7、 info; struct node *llink,*rlink; ;typedef struct node Node;Node *shuru() char x; Node *p; scanf(%c,&x); if(x!=0) p=(Node *)malloc(sizeof(Node); p-info=x; p-llink=shuru(); p-rlink=shuru(); 实验室名称指导教师签名: else p=NULL; return p;int play(Node *p) static int count=0; if(p) play(p-llink); play(p-rlink); if

8、(p-llink=NULL&p-rlink=NULL) count+; return count;main() Node *T; int n; printf(请输入一棵树(空子树用0代替):n); T=shuru(); printf(n); if(!T) printf(这树是空的啊!); else n=play(T); printf(n这棵树的叶子节点为%d。n,n); 五、实验结果与分析 A B C 该树如左图所示,叶子结点数目为2,注意叶子结点子树也为空,需要输入0。D E 7、实验心得及体会 该算法是先序遍历输入,采用递归算法,书上有例题,写起来也好懂,遍历过程中加上一个判断左右子树是否

9、都为空即可判断是否为叶子结点。数据结构实验报告专业:班级:姓名2014年12月太原理工大学学生实验报告学院名称软件学院专业班级学号实验成绩学生姓名同组人姓名无实验日期课程名称数据结构实验题目图实验记录:一目的与要求通过本次实验,掌握查找表上的有关查找方法,并分析时间复杂度。6主要仪器设备C,计算机。7实验内容 问题描述采用邻接表存储结构,编写一个求无向图的连通分量个数的算法。 输入无向图(包括顶点个数,两点之间的弧) 输出无向图的连通分量个数。 存储结构邻接表存储结构。 算法的基本思想从其中一个结点开始深度优先搜索,直到下一个结点为空则结束遍历,使得连通分量增加一,然后选择一个没有经过遍历的结

10、点重新开始深度优先搜索,等到下一个结点为空时结束遍历,使得连通分量增加一,以此类推,直到所有点都经过遍历为止。8源程序#include#includeint n; struct VNode /点 int position; struct VNode* next; ; struct ArcNode /弧 int mark; struct VNode* first; ; /深度优先搜索实验室名称指导教师签名:void DFS(struct ArcNode* v,struct ArcNode* w) struct VNode* L; w-mark=1; L=w-first; while(L!=NUL

11、L) if(v+(L-position)-mark=0) DFS(v,(v+L-position); L=L-next; int main() int i,j,k; int num=0; struct ArcNode* p; struct VNode* temp; struct VNode* flag; printf(该无向图有多少个顶点:n); scanf(%d,&n); while(n1) printf(你输入的值不合理,请重新输入:n); scanf(%d,&n); p=(struct ArcNode*)malloc(n*sizeof(struct ArcNode); for(i=0;i

12、position=k; temp-next=NULL; pi.first=temp; pi.mark=0; flag=temp; scanf(%d,&k); while(k!=0) temp=(struct VNode*)malloc(sizeof(struct VNode); temp-position=k; temp-next=NULL; flag-next=temp; flag=temp; scanf(%d,&k); i=0; while(pi.mark=0) DFS(p,(p+i); num+; i=0; while(pi.mark!=0&in) i+; printf(此图的连通分量个

13、数为:%dn,num); return 0; 五、实验结果与分析 该图为:V4-V2-V1-V3-V5 输入以VX为弧尾的所有弧,意为输入所有与VX相连的点序号即可,随后可以构造出无向图,可以求出其中的连通分量个数。8、实验心得及体会 图的构造比较难,它不像链表是一对一,树是一对多,图为多对多,因此容易发生错误,我也是上网查阅了很多资料后才弄懂理解了。数据结构实验报告专业:班级:姓名:2014年12月太原理工大学学生实验报告学院名称软件学院专业班级学号实验成绩学生姓名同组人姓名无实验日期课程名称数据结构实验题目查找实验记录:一目的与要求通过本次实验,掌握查找表上的有关查找方法,并分析时间复杂度

14、。9主要仪器设备C,计算机。10实验内容 问题描述编写程序实现下面运算:在二叉排序树中查找关键字为key的记录。 输入排序二叉树,以及要查找的数字(节点)。 输出显示该节点是否存在。 存储结构有序表采用顺序方式存储。 算法的基本思想如果二叉排序树为空树,返回空,不然,将key与根节点的关键字比较,若key等于根节点的关键字,查找成功,若key小于根节点的关键字,继续在左子树中查找,若key大于根节点的关键字,继续在右子树中查找。四源程序#include #include typedef struct BiTNode int data; struct BiTNode *lchild,*rchil

15、d;BiTNode,*BiTree;/插入void InsertBST(BiTree *T,BiTree s) if (*T=0) *T=s; else if (s-datadata) InsertBST(&(*T)-lchild),s); else if (s-data(*T)-data) InsertBST(&(*T)-rchild),s);/查找BiTree SearchBST(BiTree T,int key) if (T=0) return 0; else if (T-data=key) return T; else if (keydata) return SearchBST(T-l

16、child,key); else return SearchBST(T-rchild,key);实验室名称指导教师签名:main() int key; BiTree bt,s; int i=0; printf(n请输入元素,0为结束(先序序列):n); scanf(%d,&key); bt=0; while (key!=0) s=(BiTree)malloc(sizeof(BiTNode); s-data=key; s-lchild=s-rchild=0; InsertBST(&bt,s); scanf(%d,&key); printf(n输入你想要查找的元素:); scanf(%d,&key

17、); s=SearchBST(bt,key); if (s!=0) printf(n查找成功!n); else printf(n没有找到!n);五、实验结果与分析 书上的二叉树的插入不是递归算法,改为递归算法可以使程序看起来变的简洁,注意该二叉树为先序序列输入,结果可以实现关键字为key的查找。9、实验心得及体会 虽然插入的递归算法想起来比较难想,但是写出来以后可以简化程序,若不用递归算法,代码的数量还会增加,需要注意的是二叉排序树插入时,需要比较大小后再行插入到树中,随后查找运用书上的递归算法即可。自己在递归算法方面还是有欠缺,需要多加练习才能熟练运用。数据结构实验报告专业:班级:姓名:20

18、14年12月太原理工大学学生实验报告学院名称软件学院专业班级学号实验成绩学生姓名同组人姓名无实验日期课程名称数据结构实验题目内排序实验记录:一目的与要求通过本次实验,掌握线性表的排序方法,并分析时间复杂度。11主要仪器设备C,计算机。12实验内容 问题描述 设计一个用链表表示的直接选择排序算法,并用程序实现。 输入N个数据。 输出N个数据由小到大的序列。 存储结构待排序记录顺序存储。 算法的基本思想已知待排序初始序列用单链表存贮,头指针head指向第一个结点,从这个待排序列中找出最小结点,插入head之后,用r来指示。r以前为已排序序列,r以后为未排序序列。再从未排序序列中找出最小结点插入r的

19、后面,让r指向这个结点。反复执行这个过程,直到排好序。四源程序#include #includetypedef struct LNode int date; struct LNode *next;LNode,*LinkList;void shuru(LinkList &L,int n) if(n!=0) L=(LinkList)malloc(sizeof(LNode); L-next=NULL; LNode *p,*t; t=L; for(int i=0;idate); p-next=t-next; t-next=p; t=p;实验室名称指导教师签名:else printf(输入个数不能为空,

20、程序结束); exit(-2);void shuchu(LinkList &L,int n) LNode *p; p=L-next; for(;n0;-n) printf(%d ,p-date); p=p-next; void paixu(LNode *head,int n) if(n=0) return; int min; int i,s=0; LNode *p,*r,*t; p=head-next; r=head-next; t=head; min=p-date; for(i=0;ip-date) min=p-date; r=p; s=i; p=p-next; for(i=0;inext;

21、 t-next=r-next; r-next=head-next; head-next=r; paixu(head-next,n-1);void main() int n; LinkList A; printf(输入个数n:); scanf(%d,&n); printf(输入%d个数据:n,n); shuru(A,n); printf(您输入的数据为:n); shuchu(A,n); printf(n排序后的数据为:n); paixu(A,n); shuchu(A,n);五、实验结果与分析经过直接选择排序可以看到序列已经变得有序,但是我只考虑了当输入个数为0是程序会退出,未做异常状况的处理。10、实验心得及体会单链表的建立是用到了尾插法,需要定义头尾两个结点,排序用到了递归算法,通过多次递归可以使得头指针head后移,不需要定义头尾,若不用递归算法,需要建立多次的循环,程序阅读起来不方便,容易导致错误的发生,所以在该程序中我使用了递归算法,不过花了相当长的时间去理解,递归算法依然对我来说是难点,需要多加练习。

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

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