数据结构课程实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程实验报告课程名称:数据结构

专业班级:信息安全1302班

学号:

姓名:

指导教师:

报告日期:2015年5月14日

计算机科学与技术学院

目录

1 课程实验概述 (1)

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

2.1 问题描述 (2)

2.2 系统设计 (2)

2.3 系统实现 (2)

2.4 效率分析 (11)

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

3.1 问题描述 (12)

3.2 系统设计 (12)

3.3 系统实现 (12)

3.4 效率分析 (20)

4 实验三基于二叉链表的二叉树实现 (22)

4.1 问题描述 (22)

4.2 系统设计 (22)

4.3 系统实现 (22)

4.4 效率分析 (32)

5 实验总结与评价 (35)

6 附录程序代码 (37)

1 课程实验概述

本次课程实验总共分为三个实验:基于顺序结构的线性表实现;基于链式结构的线性表实现;基于二叉链表的二叉树实现。三个实验均以C语言实现并要求提供能够实现功能的演示系统,物理结构与元素类型自定。

通过课程实验加深对线性表以及二叉树数据结构和算法的理解。在编程过程中通过亲自实践形成良好的代码风格,在调试程序过程中能够发现很多C语言基础问题以及固有的错误观点,进一步提升编程能力。实验报告中也包括很多有益的东西,比如:基于数据结构的系统划分方法;递归算法设计方法和技巧;对于有天然递归属性的问题如何构造非递归算法。对实验报告格式的严格要求也会为今后撰写论文打下坚实的基础。另外更重要的一点是,从开始设计、编程、到撰写报告的整个过程,是对分析问题、解决问题的综合能力的锻炼。虽然本次的三个实验均是比较经典的数据结构,要实现其功能不是非常难,但是依然需要细心、耐心,尤其是在调试程序和撰写报告工程中。与此同时,和同学的交流以及老师的交流也是非常重要的一个环节。在交流过程中能够发现自身的问题、开阔思路。当然,交流并不意味着抄袭。独立完成整个课程实验才能有所收获。

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

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

2.1 问题描述

线性表有两类存储结构:顺序结构和链式结构。实验一将通过顺序存储结构实现线性表的基本操作。

要求:

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

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

2.2 系统设计

1)背景

运行环境:Windows

程序语言:C语言

开发环境:CodeBlocks

2)功能描述

基于顺序存储结构,实现线性表的基本的,常见的运算:表的构造、表的销毁、表的重置、空表的查看、获取表的长度、获取数据元素、获取前驱、后继、查找数据元素、插入数据元素、删除数据元素及输出线性表。

2.3 系统实现

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

#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量

#define LISTINCREMENT 10 //线性表存储空间的分配增量

typedef struct{

int *elem; //存储空间基址

int length; //表长

int listsize; //分配的存储容量

}SqList;

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

status IntiaList(SqList * L);

status DestroyList(SqList * L);

status ClearList(SqList *L);

status ListEmpty(SqList L);

int ListLength(SqList L);

status GetElem(SqList L,int i,ElemType * e);

status LocateElem(SqList L,ElemType e);

status PriorElem(SqList L,ElemType cur,ElemType * pre_e);

status NextElem(SqList L,ElemType cur,ElemType * next_e);

status ListInsert(SqList * L,int i,ElemType e);

status ListDelete(SqList * L,int i,ElemType * e);

status ListTrabverse(SqList L);

int InitList(SqList *L)

//功能描述:构造一个空线性表L。

//算法思想:申请存储数据元素空间,然后表长置0,存储容量置为LIST_INIT_SIZE

status Destroylist(SqList *L)

//功能描述:销毁已存在的线性表L。

//算法思想:存储空间基址置空,长度置0,当前存储容量置0

status ClearList(SqList *L)

//功能描述:重置已存在的线性表L。

//算法思想:长度置0

status ListEmpty(SqList L)

//功能描述:若线性表L为空表,返回1,否则返回0。

//算法思想:如果线性表的当前长度为0,则返回1,否则返回0

int ListLength(SqList L)

//功能描述:返回线性表L中数据元素的个数。

//算法思想:若线性表存在,则返回L.length

status GetElem(SqList L,int i,int *e)

//功能描述:用e返回线性表L中第i个元素的值。

//算法思想:将L中第i个数据元素放到e中并返回

status LocateElem(SqList L,int e)

//功能描述:返回线性表L中数据元素e的位序;若线性表中不存在数据元素e,

相关文档
最新文档