数据结构实验报告

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

课程实验报告课程名称:数据结构(C语言版)

专业班级:计算机1002班

学号:U201014285

姓名:邹若兰

指导教师:周时阳

报告日期:2012/5/4

计算机科学与技术学院

目录

1 课程实验概述 (3)

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

2.1 问题描述 (4)

2.2 系统设计 (4)

2.3 系统实现 (7)

2.4 效率分析 (9)

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

3.1 问题描述 (10)

3.2 系统设计 (10)

3.3 系统实现 (13)

3.4 效率分析 (16)

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

4.1 问题描述 (17)

4.2 系统设计 (17)

4.3 系统实现 (22)

4.4 效率分析 (26)

5 实验总结与评价 (26)

1 课程实验概述

本课程实验为数据结构试验,包括三个实验内容,实验目的在于:

1.加深对数据结构和算法的理解,进一步提高学生编程能力;

2.培养和提高学生分析问题与解决问题的综合能力;

3.整理资料,撰写规范的实验报告。

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

2.1 问题描述

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

实验要求:

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

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

⑶线性表数据可以使用磁盘文件永久保存

2.2 系统设计

本系统提供两个基于顺序存储结构的线性表,模拟应用背景为:学生信息表和教师信息表,数据元素的数据项为:姓名、学号(或教师编号)、性别、年龄。

该演示系统提供的操作有:表的初始化、销毁、置空、判空,求表长、获取数据元素、查找数据元素、获得前驱、获得后继、插入数据元素、删除数据元素、表的遍历;此外还有表的创建、加载、保存操作选项,并提供已保存的数据表文件,便于演示操作。

应用程序构架:主要包含主程序、菜单函数、菜单选项处理函数。

在主程序中实现分支循环控制,主要部分是:调用菜单函数显示菜单;询问并接受用户的菜单选项进行消息的接受处理;对选择消息判断后通过分支转至相应处理部分,在处理部分实现功能调用前的准备工作(如继续对用户处理要求进行询问)、功能函数的调用、调用后的后续控制处理工作(询问用户要求);调用结束返回菜单选项,进行下一轮的处理。在菜单选项中提供退出系统的退出函数。

演示系统具体实现流程图如下:

说明:

其中“根据选择转至相应功能调用处理部分,实现线性表的基本操作”本应是包含十五个分支的分支结构分别指向不同的基本操作处理部分,限于篇幅不一一赘举。现文字描述如下:

十五个分支对应1—15个选项,分别为:表的加载、保存、表的初始化、表的创建、销毁、置空、判空、求表长、获取数据元素、查找数据元素、获得前驱、获得后继、插入数据元素、删除数据元素、表的遍历。对于每一个“功能调用”处理部分大致结构为:预处理、调用处理函数、后继处理。其中预处理包括询问是对学生还是教师信息表进行操作、或是为调用处理函数还需用户输入的相关信息,如插入操作调用插入函数前需询问插入位置并要求输入插入信息,等;后继处理包括输出功能函数调用后的相关结果或询问用户是否遍历输出表的信息以便检查是否操作正确成功(方便老师检查)。

线性表的顺序存储表示:

typedef struct {

ElemType *elem; 指针,指向顺序存放的一串数据元素

int length; 表长(实际数据元素个数)

int size; 表的大小(最多存贮数据元素个数)

}SqList;

相关函数的算法思想描述:

I nitList(&L) (创建表,此处是指表的初始化):

(1)申请存储数据元素空间

(2)置表长为0.

DestroyList(&L) (销毁表):

(1)释放存储数据元素的空间置指针值为NULL。

ClearList(&L) (置表空):

(1)置表长为空(length=0)

ListEmpty(L) (判空):

(1)若表长=0,返回TRUE,否则返回FALSE。

ListLength(L) (求表长):

(1)返回表长

GetElem (L, i, &e) (获取数据元素):

(1)将第i单元值赋值给e

LocateElem( L,e,compare( ) ) (查找数据元素)

(1)按compare条件顺序查找e,若找到(第一次找到)返回对应位序,若未找到返回0

PrioreElem( L, cur_e, &pre_e ) (获得前驱)

(1)查找cur_e获取位序K

(2)若K>1,将K-1号单元的元素赋值给pre_e并返回,否则返回ERROR。NextElem( L, cur_e, &next_e ) ( 获取后继):

(1)查找cur_e, 获得位序K

(2)若K<表长,将K+1号元素值赋值给next_e并返回,否则返回ERROR。ListInsert( &L, i, e ) (插入数据元素):

(1)移动元素,将位序为L.length ~ i 的数据元素顺序向后移动一个存储单元(2)插入新值,将e置入第i号存储单元

(3)修改表长,将表长加1

ListDelete(&L, i, &e) (删除数据元素):

(1)获取返回值,将i号单元数据值赋给e返回

(2)移动元素,将序号i+1 ~ L.length的数据元素顺序前移一个存储单元

(3)修改表长,将表长减1

ListTraverse( L, visit( ) )

(1)调用visit函数顺序访问每一个数据元素,用L.length控制循环次数。

相关文档
最新文档