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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构综合实验报告.docx

1、数据结构综合实验报告数据结构与算法综合实验报告系 别: 信息与控制学院 专 业: 软件工程专业学 号: 10306110姓 名: 魏兴 指导教师: 李莹 2011年 11月 25日沈阳理工大学应用技术学院实验目的掌握线性表的建立、插入、删除算法;掌握查找算法;掌握排序算法;实验要求使用C语言(环境任意)开发程序,能够对用户输入的任意一组数据,建立一个线性表,可以输出此线性表。并且能够对此线性表进行插入、删除、查找、排序等操作。程序流程1.打开VC+程序2.编码线形表的语句,让其能够执行建表,输出,删除,查找,插入,排序.显示主函数,显示选择操作主页面.3执行输入12345来选择想要执行的语句,

2、重复操作,得到所想要的结果.代码及运行结果(主要语句要求有注释)#define NULL 0 宏定义用NULL代替0typedef struct linknode 定义结构体名 节点类型 int data; 将数据成员定义为INT 型 struct linknode *next; 定义数据结构名和指针变量名(指针域)node;node *creat(head) 单链表,参数为head 形参)node *head; 声明指针head 指向节点 node *currnode,*newnode;声明指针 currnode环绕newnode 指向节点 int x; 定义整形变量 head=(node*

3、)malloc(sizeof(node); 向系统申请分配链表节点的存储空间 首地址为head currnode=head;赋值给currnodehead do scanf(%d,&x);输入变量X newnode=(node*)malloc(sizeof(node);向系统申请动态的存储空间 首地址为newnode newnode-data=x;newnode 指向第一个节点并赋予x currnode-next=newnode; currnode指向第一个节点 并赋值为newnode currnode=newnode; 指针向后移 到下一个节点 while(x!=NULL); 若X 不为空时

4、 循环为0时 导出循环 head=head-next;头指针 向下个节点后移 head由head指向next赋给 currnode-next=NULL; 最后一点的指针域为空 return head; 返回head;node *head; 声明头节点headvoid print() 转出函数 node *currnode; 声明 currnode=head; 当前指针为head printf(链表如下.linklist:); 输出linllist 单链表 while(currnode-data!=NULL) 循环并同时判断指针currnode指向的data值为是否为空 printf(%d-,c

5、urrnode-data);若不为空 则输出指针的指 currnode=currnode-next;指针currnode 向下一节点后移 ; printf(NULLn); 输出空换行 printf(链表长度为.linklist length%dn,length(); 输出单链表的长度 length 返回至;void delete()删除函数 int x; 定义整形变量X node *delnode,*currnode; 声明delnode和currnode指针 printf(输入要删除数据.input delete data:); 输出input delete date (输入想删除数据) s

6、canf(%d,&x);输入 整形X if(head-data=NULL) printf(此链表为空无法删除.this linklist empty!n); 判断若头指针为空输出LINKLIST null if(head-data=x) 判断如果头指针指向的data与X值相同 delnode=head; 指针delnode指向头指针 head=head-next;头指针后移 free(delnode);释放指针delnode if(head=NULL) printf(此链表为空.this linklist enpty!);若head 为null 输出linklist null else cur

7、rnode=head;否则指针currude指向head delnode=currnode-next;指针delnode 指向指针currnode 并向下一节点后移 while(delnode-data!=x&delnode!=NULL) 判断delnode指向data不等于X且不为空 currnode=currnode-next;则指针currnode 向下一节点移动 delnode=currnode-next; 指针delnode指向currnode并向后移 ; if(delnode=NULL)如果指针delnide为空 printf(无此数据.no this data!n);则直接输出a

8、 data is null else currnode-next=delnode-next;否则指针currnode next指向指针delenode到next free(delnode); 释放delnode所指的变量空间 ; ;int length() 定义长度 node *currnode; 声明指针currnode int i=0; 定义整形i=0 currnode=head; 指针currnode指向head while(currnode-data!=NULL) 判断指针currnode若不为空 currnode=currnode-next; 指针currnode后移 i+; i+

9、; return i; 返回i值; 单链表的删除流程图:若删除的节点为头结点,则若删除的节点为中间节点,则void find() 查找 node *currnode; 申明指针currnode int count=1,x; 定义整形变量count=1和x currnode=head; 指针currnode指向head printf(input search data:); 输出input search data scanf(%d,&x); 输入整形x while(currnode-data!=NULL&currnode-data!=x) 循环判断指针不为空且不等于x值 currnode=cur

10、rnode-next; 则指针currnode后移 count+; count+ ; if(currnode-data!=NULL) 如果currnode指向的data不为空 printf(n%dNo.,currnode-data); 输出指针currnode所指向的值 printf(%ddata。n,count); 输出,换行 else printf(nthis data is null!n); 否则输出this data is null;void insert() 插入 int x,w,i; 定义整形变量x,w,i node *insertnode, *afternode,*currnod

11、e; 申明指针insertnode,afternode,currnode; printf(input insert data:); 输出input insert data scanf(%d,&x); 输入x printf(insert n node aftern=); 输出insert n node after,换行 scanf(%d,&w); 输入w insertnode=(node*)malloc(sizeof(node); 向系统中申请动态存储空间 insertnode-data=x; 将指针insertnode指向的data值赋为x if(w=0) 若w=0 insertnode-ne

12、xt=head; 指针insertnodenode指向head head=insertnode; 指针head指向指针insertnode else if(wlength() printf(oucurrnodet wider!n); 若w超过总长度,输出out wider else currnode=head;afternode=currnode-next; 指针currnode指向指针head for(i=1;iw;i+) i为1,若inext; 指针afternode向下一结点后移 currnode=currnode-next; 指针currnode向下一结点后移 ; currnode-n

13、ext=insertnode; 指针currnode-next指向指针insertnode insertnode-next=afternode; 指针insertnode-next指向指针afternode ;单链表的插入流程图:若插入到头结点以前,则若插入到中间节点,则若插入尾节点,则void sort()/排序部分(冒泡排序) node *p,*p2,*p3;/声明指针p,p2,p3 int i,j,n;/定义整形i,j,n int temp;/定义整形 temp n=length(head);/n赋值为头结点的长度 if(head=NULL|head-next=NULL)/如果只有一个或

14、者没有节点 return head;/返回头结点 p=head;/指针p指向head头节点for(j=1;jn;+j)/循环 p=head;/指针p指向head头节点 for(i=0;idata p-next-data)/判断p指向的值和p的下一个节点指向的值 temp=p-data;/如果判断成立 则temp的值为p的值 p-data=p-next-data;/p的值为p下一个节点的值 p-next-data=temp;/p的下一个节点的值为temp的值 p=p-next;/指针p向下一节点移动 return (head);/返回head;void operation() 定义operati

15、on函数 printf(delete data:.1n); 删除数据按1 printf(serch data :.2n); 寻找数据按2 printf(insert data:.3n); 插入数据按3 printf(sort:.4n); 排序数据按4 printf(end:.5n); 结束按5 printf(?:);main() main函数 int choic; 定义int型变量choic printf(ninput data 0 end:n); 输出显示”input data 0 end:” head=creat(); print(); operation(); do scanf(%d,&

16、choic); 运用switch语句实现选择功能 switch(choic) case 1: delete(); print(); operation(); break; case 2: find(); operation(); break; case 3:insert(); print(); operation(); break; case 4:sort(&head); print(); operation(); break; default:printf(operente end!); break; ; while(choic!=5); 个人总结(要求1000字以上)一、数据结构与算法知识

17、点在自己寻找的教材的数据结构与算法第一章便交代了该学科的相关概念,如数据、数据元素、数据类型以及数据结构的定义。其中,数据结构包括逻辑结构、存储结构和运算集合。逻辑结构分为四类:集合型、线性、树形和图形结构,数据元素的存储结构分为:顺序存储、链接存储、索引存储和散列存储四类。紧接着介绍了一些常用的数据运算。最后着重介绍算法性能分析,包括算法的时间性能分析以及算法的空间性能分析。第二章具体地介绍了顺序表的概念、基本运算及其应用。基本运算有:初始化表、求表长、排序、元素的查找、插入及删除等。元素查找方法有:简单顺序查找、二分查找和分块查找。排序方法有:直接插入排序、希尔排序、冒泡排序、快速排序、直

18、接选择排序及归并排序等。最后介绍了顺序串的概念,重点在于串的模式匹配。链表中数据元素的存储不一定是连续的,还可以占用任意的、不连续的物理存储区域。与顺序表相比,链表的插入、删除不需要移动元素,给算法的效率带来较大的提高。链表这一章中介绍了链表的节点结构、静态与动态链表的概念、链表的基本运算(如求表长、插入、查找、删除等)、单链表的建立(头插法和尾插法)以及双向循环链表的定义、结构、功能和基本算法。堆栈与队列是两种运算受限制的线性结构。其基本运算方法与顺序表和链表运算方法基本相同,不同的是堆栈须遵循“先进后出”的规则,对堆栈的操作只能在栈顶进行;而队列要遵循“先进先出”的规则,教材中列出了两种结

19、构的相应算法,如入栈、出栈、入队、出队等。在介绍队列时,提出了循环队列的概念,以避免“假溢出”的现象。第六章介绍了特殊矩阵和广义表的概念与应用。其中,特殊矩阵包括对称矩阵、三角矩阵、对角矩阵和稀疏矩阵,书中分别详细介绍了它们的存储结构。稀疏矩阵的应用包括转置和加法运算等。最后介绍了广义表的相关概念及存储结构,关于它的应用,课本中举了m元多项式的表示问题。第七章二叉树的知识是重点内容。在介绍有关概念时,提到了二叉树的性质以及两种特殊的二叉树:完全二叉树和满二叉树。接着介绍二叉树的顺序存储和链接存储以及生成算法。重点介绍二叉树的遍历算法(递归算法、先序、中序和后序遍历非递归算法)和线索二叉树。二叉

20、树的应用:基本算法、哈弗曼树、二叉排序树和堆排序。树与二叉树是不同的概念。教材介绍了树和森林的概念、遍历和存储结构,还有树、森林和二叉树的相互关系,树或森林怎样转化成二叉树,二叉树又如何转换为树和森林等算法。散列结构是一种查找效率很高的一种数据结构。本章的主要知识点有:散列结构的概念及其存储结构、散列函数、两种冲突处理方法、线性探测散列和链地址散列的基本算法以及散列结构的查找性能分析。最后一章介绍了图的概念及其应用,是本书的难点。图的存储结构的知识点有:邻接矩阵、邻接表、逆邻接表、十字链表和邻接多重表。图的遍历包括图的深度优先搜索遍历和广度优先搜索遍历。其余知识点有:有向图、连通图、生成树和森

21、林、最短路径问题和有向无环图及其应用。有向无环图重点理解AOV网和拓扑排序及其算法。二、对各知识点的掌握情况总体来看,对教材中的知识点理解较为完善,但各个章节均出现有个别知识点较为陌生的现象。现将各个章节出现的知识点理解情况列举如下。第一章中我对数据和数据结构的概念理解较为透彻,熟悉数据结构的逻辑结构和存储结构。而对算法的时间、空间性能分析较为模糊,尤其是空间性能分析需要加强。第二章,顺序表的概念、生成算法理解较为清晰,并且熟悉简单顺序查找和二分查找,对分块查找较为含糊;排序问题中,由于冒泡排序在大一C语言课上已经学习过,再来学习感觉很轻松。对插入排序和选择排序理解良好,但是,在实际运用中仍然

22、出现明显不熟练的现象。由于在归并排序学习中感觉较吃力,现在对这种排序方法仍然非常模糊,所以需要花较多的时间来补习。此外串的模式匹配也是较难理解的一个地方。链表这一章中,除对双向循环链表这一知识点理解困难之外,其他的知识点像单链表的建立和基本算法等都较为熟悉。接下来的有关堆栈以及队列的知识点比较少,除有关算法较为特殊以外,其余算法都是先前学过的顺序表和链表的知识,加上思想上较为重视,因此这部分内容是我对全书掌握最好的一部分。不足之处仍然表现在算法的性能分析上。在学习第六章时感觉较为吃力的部分在于矩阵的应用上,尤其对矩阵转置算法的C语言描述不太理解。稀疏矩阵相加算法中,用三元组表实现比较容易理解,

23、对十字链表进行矩阵相加的方法较为陌生。第七章是全书的重点,却也有一些内容没有完全理解。在第一节基本概念中,二叉树的性质容易懂却很难记忆。对二叉树的存储结构和遍历算法这部分内容掌握较好,能够熟练运用,而对于二叉树应用中的哈弗曼树却比较陌生。第八章内容较少,牵涉到所学的队列的有关内容,总体来说理解上没有什么困难,问题依旧出现在算法的性能分析上。散列结构这一章理解比较完善的知识点有:基本概念和存储结构。散列函数中直接定址法和除留余数法学得比较扎实,对数字分析法等方法则感觉较为陌生。对两种冲突处理的算法思想的理解良好,问题在于用C语言描述上。最后一章,图及其应用中,图的定义、基本运算如图的生成等起初理

24、解有困难,但随着学习深入,对它的概念也逐步明朗起来。邻接矩阵、邻接表和逆邻接表掌握较好,而对十字链表和邻接多重表则较为陌生。感觉理解较为吃力的内容还有图的遍历(包括深度和广度优先遍历),最小生成树问题也是比较陌生的知识点。最短路径和AOV网学习起来感觉比较轻松,而对于C语言描述却又不大明白。三、学习体会接触数据结构与算法以前,我对数据结构与算法并不了解,这是否是在介绍一种新的计算机语言?如果不是,那么学习这门课程的用途是什么?为什么各种介绍数据结构的资料采用了不同的计算机语言,如C、C+还有Java?对于我的C语言学习否有影响在学习伊始,自己就明确了它不是一种计算机语言,不会介绍新的关键词,而

25、是通过学习可以设计出良好的算法,高效地组织数据。一个程序无论采用何种语言,其基本算法思想不会改变。联系到在大一学期学习的C语言,我深刻认识到了这一点。“软件开发好比写作文,计算机语言提供了许多华丽的辞藻,而数据结构则考虑如何将这些辞藻组织成一篇优秀的文章来。”在学习这门课中,要熟悉对算法思想的一些描述手段,包括文字描述、图形描述和计算机语言描述等。因此,计算机语言基础是必须的,因为它提供了一种重要的算法思想描述手段机器可识别的描述。数据结构与算法学习结束之后,我总结了学习中遇到的一些问题,最为突出的,书本上的知识比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到

26、适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序的编写。针对这一情况,我会严格要求自己,熟练掌握算法思想,尽量独立完成程序的编写与修改工作,只有这样,才能够提高运用知识,解决问题的能力。四、对数据结构与算法学习的建议1、建议在学习过程中加大练习的分量,以便能及时消化自己学习的知识,也便于及时了解自己对知识点的掌握情况,同时有助于保持自己良好的精神状态。2、建议在时间允许的情况下,增加练习的时间,通过练习,加深对知识点的掌握,同时对各知识点的运用有一个更为直观和具体的认识。以上便是我对数据结构与算法的学习总结,我会抓紧时间将没有吃透的知识点补齐。今后我仍然会继续学习,克服学习中遇到的难关,在打牢基础的前提下向更深入的层面迈进!

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

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