数据结构课程实验报告Word文档下载推荐.docx

上传人:b****3 文档编号:15973056 上传时间:2022-11-17 格式:DOCX 页数:76 大小:988.30KB
下载 相关 举报
数据结构课程实验报告Word文档下载推荐.docx_第1页
第1页 / 共76页
数据结构课程实验报告Word文档下载推荐.docx_第2页
第2页 / 共76页
数据结构课程实验报告Word文档下载推荐.docx_第3页
第3页 / 共76页
数据结构课程实验报告Word文档下载推荐.docx_第4页
第4页 / 共76页
数据结构课程实验报告Word文档下载推荐.docx_第5页
第5页 / 共76页
点击查看更多>>
下载资源
资源描述

数据结构课程实验报告Word文档下载推荐.docx

《数据结构课程实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程实验报告Word文档下载推荐.docx(76页珍藏版)》请在冰豆网上搜索。

数据结构课程实验报告Word文档下载推荐.docx

本次课程实验总共分为三个实验:

基于顺序结构的线性表实现;

基于链式结构的线性表实现;

基于二叉链表的二叉树实现。

三个实验均以C语言实现并要求提供能够实现功能的演示系统,物理结构与元素类型自定。

通过课程实验加深对线性表以及二叉树数据结构和算法的理解。

在编程过程中通过亲自实践形成良好的代码风格,在调试程序过程中能够发现很多C语言基础问题以及固有的错误观点,进一步提升编程能力。

实验报告中也包括很多有益的东西,比如:

基于数据结构的系统划分方法;

递归算法设计方法和技巧;

对于有天然递归属性的问题如何构造非递归算法。

对实验报告格式的严格要求也会为今后撰写论文打下坚实的基础。

另外更重要的一点是,从开始设计、编程、到撰写报告的整个过程,是对分析问题、解决问题的综合能力的锻炼。

虽然本次的三个实验均是比较经典的数据结构,要实现其功能不是非常难,但是依然需要细心、耐心,尤其是在调试程序和撰写报告工程中。

与此同时,和同学的交流以及老师的交流也是非常重要的一个环节。

在交流过程中能够发现自身的问题、开阔思路。

当然,交流并不意味着抄袭。

独立完成整个课程实验才能有所收获。

总之,本次实验旨在巩固课堂所学的知识,提高编程能力,提高分析解决问题的能力。

2实验一基于顺序结构的线性表实现

2.1问题描述

线性表有两类存储结构:

顺序结构和链式结构。

实验一将通过顺序存储结构实现线性表的基本操作。

要求:

1)提供一个实现功能的演示系统

2)具体物理结构和数据元素类型自行选定

2.2系统设计

1)背景

运行环境:

Windows

程序语言:

C语言

开发环境:

CodeBlocks

2)功能描述

基于顺序存储结构,实现线性表的基本的,常见的运算:

表的构造、表的销毁、表的重置、空表的查看、获取表的长度、获取数据元素、获取前驱、后继、查找数据元素、插入数据元素、删除数据元素及输出线性表。

2.3系统实现

1)顺序表的动态分配存储结构以及部分全程量

#defineLIST_INIT_SIZE100//线性表存储空间的初始分配量

#defineLISTINCREMENT10//线性表存储空间的分配增量

typedefstruct{

int*elem;

//存储空间基址

intlength;

//表长

intlistsize;

//分配的存储容量

}SqList;

2)相关函数说明以及基本算法思想

statusIntiaList(SqList*L);

statusDestroyList(SqList*L);

statusClearList(SqList*L);

statusListEmpty(SqListL);

intListLength(SqListL);

statusGetElem(SqListL,inti,ElemType*e);

statusLocateElem(SqListL,ElemTypee);

statusPriorElem(SqListL,ElemTypecur,ElemType*pre_e);

statusNextElem(SqListL,ElemTypecur,ElemType*next_e);

statusListInsert(SqList*L,inti,ElemTypee);

statusListDelete(SqList*L,inti,ElemType*e);

statusListTrabverse(SqListL);

intInitList(SqList*L)

//功能描述:

构造一个空线性表L。

//算法思想:

申请存储数据元素空间,然后表长置0,存储容量置为LIST_INIT_SIZE

statusDestroylist(SqList*L)

销毁已存在的线性表L。

存储空间基址置空,长度置0,当前存储容量置0

statusClearList(SqList*L)

重置已存在的线性表L。

长度置0

statusListEmpty(SqListL)

若线性表L为空表,返回1,否则返回0。

如果线性表的当前长度为0,则返回1,否则返回0

intListLength(SqListL)

返回线性表L中数据元素的个数。

若线性表存在,则返回L.length

statusGetElem(SqListL,inti,int*e)

用e返回线性表L中第i个元素的值。

将L中第i个数据元素放到e中并返回

statusLocateElem(SqListL,inte)

返回线性表L中数据元素e的位序;

若线性表中不存在数据元素e,则返回值为0。

用一个for循环比较e和线性表中的数据元素,如果存在元素与e相等,返回元素位置,否则返回0

statusPriorElem(SqListL,ElemTypecur,ElemType*pre_e)

若pre_e是L的数据元素,且不是第一个,则用pre_e返回他的前驱,否则操作失败,pre_e无定义。

定位元素,然后返回他前面的那个元素

功能描述:

若next_e是L的数据元素,且不是第一个,则用next_e返回他的前驱,否则操作失败,next_e无定义。

定位元素,然后返回他后面的那个元素

statusListInsert(SqList*L,inti,inte)

在元素ai之前插入新元素e。

在线性表中找到第i个数据元素,将它以及后面的元素后移,再在第i个元素赋值为e数据元素,并且表长加1

statusListDelete(SqList*L,inti,int*e)

删除线性表L中第i个数据元素。

在线性表中找到第i个数据元素,将其放到e中,并将后面的数据元素前移,表长减1

statusListTrabverse(SqListL)

输出线性表L。

若线性表存在,则用for循环输出线性表

3)部分算法流程图

插入函数流程图

开始

删除函数流程图

4)部分运行截图

图1界面

图2列出线性表内容

图3插入元素

图4查找元素在线性表中的位置

图5线性表的长度

图6前驱

图7后继

图8得到某位置的元素

图9置空

2.4效率分析

算法时间主要花费在移动元素上,与元素个数和插入位置有关,假设在任一位置上插入是等概率的,则平均需要移动一半的元素,表长为n,算法的时间复杂度为O(n)。

算法时间主要花费在移动元素上,与元素个数和删除位置有关,假设在任一位置上删除是等概率的,则平均需要移动一半的元素,表长为n,算法的时间复杂度为O(n)。

算法时间主要花费在寻找符合条件的元素的那个for循环上,花费的时间与元素的位置有关,表长为n,算法时间复杂度为O(n)。

算法时间几乎全部花在遍历上,与表长有关,算法的时间复杂度为O(n)。

算法时间主要花费在定位上,花费的时间与元素的位置有关,表长为n,算法时间复杂度为O(n)。

statusNextElem(SqListL,ElemTypecur,ElemType*next_e)

其余函数的算法时间复杂度均为O(c)

3实验二基于链式结构的线性表实现

3.1问题描述

实验二将通过链式结构实现线性表的基本操作。

3)提供一个实现功能的演示系统

4)具体物理结构和数据元素类型自行选定

3.2系统设计

基于链式结构,实现线性表的基本的,常见的运算:

3.3系统实现

1)链式表的动态分配存储结构以及部分全程量

typedefstructNode{//链式表(链式结构)的定义

ElemTypeelem;

structNode*next;

}List,*SqList;

statusListDelete(SqList*L,inti,ElemTypee);

statusInitList(SqList*L)

statusDestroylist(LinkList*L)

毁已存在的线性表L。

用循环释放每一个结点,然后将*L置空

StatusListEmpty(LinkListL)

若线性表L为空表

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

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

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