文档视界 最新最全的文档下载
当前位置:文档视界 › 数据结构实验报告

数据结构实验报告

数据结构实验报告

课题名称:数据结构实验课学号:

姓名:

班号:

2015年12月

目录

一、实验目的,要求及任务 (4)

1.1目的

1.2要求

1.3任务

二、算法设计、程序运行结果 (4)

2.1 实验一 (4)

1题目

2算法设计

(1)设计思路

(2)程序关系图

(3)实验功能描述

3实验数据与结果

2.2实验二 (11)

1题目

2算法设计

(1)设计思路

(2)程序关系图

(3)实验功能描述

3 实验数据与结果

2.3实验三 (13)

1题目

2算法设计

(1)设计思路

(2)程序关系图

(3)实验功能描述

3 实验数据与结果

2.4实验四 (18)

1题目

2算法设计

(1)设计思路

(2)程序关系图

(3)实验功能描述

3 实验数据与结果

2.5实验五 (24)

1题目

2算法设计

(1)设计思路

(2)程序关系图

(3)实验功能描述

3 实验数据与结果

三、实验小结 (31)

一、实验目的、要求及任务

1.1目的

通过实验,使学生熟悉常用的数据结构,掌握其算法设计方法,重点掌握单链表、栈和队列、二叉树、图等几种数据结构的设计与应用。

1.2要求

进行数据结构应用有关的程序设计,使用VC++环境(或其他C编译环境)上机测试通过,并提交实验报告。

1.3任务

必做题(教材):

P63 上机实验题2 实验题2.5、2.6、2.7

P96 上机实验题3 实验题3.3、3.5/3.8

P119 上机实验题4 实验题4.3

P152 上机实验题6 实验题6.2、6.4

P202 上机实验题7 实验题7.1、7.2、7.4

P152 上机实验题8 实验题8.1、8.2、8.5

选做题:

1、选部分作业上机验证;

2、教材上机实验2~8 中未布置的感兴趣的题;

3、补充设计题见后。

二、算法设计、程序与运行结果

2.1 实验1(exp2-5)

1、题目

编写一个程序algo2-5.cpp,实现循环双单链表的各种基本运算(假设循环双链表的元素类型为char),并在此基础上设计一个主程序完成如下功能:

(1)初始化循环双链表h

(2)一次采用尾插法插入a,b,c,d,e元素

(3)输出循环双链表h

(4)输出循环双链表h的长度

(5)判断循环双链表h是否为空

(6)输出循环双链表h的第三个元素

(7)输出元素a的位置

(8)在第4个元素位置上插入f元素

(9)输出循环双链表h

(10)删除L的第3个元素

(11)输出循环双链表h

(12)释放循环双链表h

2、算法设计

(1) 设计思路

首先我们应该写出所有的关于循环双链表的最基本的运算函数,完成个如下功能,比如初始化,释放,判断是否为空,计算链表元素个数,输出链表,取得第i个位置的值,插入和删除第i个元素等功能,然后在主函数中调用这些函数即可。

(2) 程序关系图

(3) 函数功能描述

InitList()

用来初始化线性表

DestoryLIst()

销毁线性表

ListEmpty()

判断线性表是否为空,空返回真,不空返回假ListLength()

求线性表的长度

DisplayList()

输出线性表的元素GetElem()

求线性表中第i个元素的值LocateElem()

按照元素查找某元素在第几个位置ListInsert()

在某一位置插入某个元素ListDelete()

删除第i个位置的元素CreateLinklist()

尾插法创建链表

3、实验数据与结果

2.2 实验2(exp3-3)

1、题目

编写一个程序algo3-3.cpp,实现唤醒队列的各种基本运算(假设队列中元素类型为char),并在此基础上设计一个程序exp3-3.cpp完成如下功能

(1)初始化队列q

(2)判断队列q是否为空

(3)以此进队元素a,b,c,d,e,f

(4)出队一个元素,输出该元素

(5)依次进队元素g,h,i,j,k,l

(6)输出出队序列

(7)释放队列

2、算法设计

(1) 设计思路

改程序涉及到的几个函数主要需要实现的功能是入队和进队,应该考虑对空的条件——队首指针等于队尾指针,队满的条件——(队尾指针+1)%Maxsize=队首指针

(2) 程序关系图

(3) 函数功能描述

InitQueue()

初始化队列DestoryQueue()

销毁队列

QueueEmpty()

判断队列是否为空

enQueue()

进队

deQueue()

出队

3、实验数据与结果

2.3实验3(exp4-3)

1、题目

编写一个程序exp4-3.cpp,实现顺序串的各种匹配模式运算,并在此基础上完成如下功能:

(1)建立“abcabcdabcdeabcdefabcdefg”目标串和“abcdeabcdefab”模式串t;

(2)简单匹配算法求t在s中过的位置;

(3)由模式串t求出next的值和nextval的值

(4)采用KMP算法求t在s中的位置

(5)采用改进的KMP算法求t在s中的位置

2、算法设计

(1) 设计思路

本题的关键是KMP算法的思路以及改进后的KMP算法思路,一般的模式串匹配算法是按个扫描目标串和模式串,如果不匹配,则目标串跳转到下一个字母重新匹配,这在很大程度上做了很多重复匹配的工作,所以KMP算法就是在此基础上的改进

(2) 程序关系图

(3) 函数功能描述

StrAssign()

将str[]中的字符串复制到s中DispStr()

输出字符串

Index()

简单的匹配算法

GetNext()

根据模式串求出下一个字符的下标KMPIndex()

KMP算法GetNextval()

由t求出nextval的值KMPIndexpro()

改进后的KMP算法

3、实验数据与结果

2.4实验4(exp6-4)

1、题目

假设n*n的稀疏矩阵A采用三元组表示,设计一个程序exp6-4.cpp实现如下功能(1)生成如下两个稀疏矩阵的三元组a,b

1 0 3 0 3 0 0 0

0 1 0 0 0 4 0 0

0 0 1 0 0 0 1 0

0 0 1 1 0 0 0 2

(2)输出a转置矩阵的三元组;

(3)输出a+b的三元组

(4)输出a*b的三元组

2、算法设计

(1) 设计思路

用一个结构体创建三元组,加法只需要将行号和列号相同的数相加即可,如果连个数都是零,就可以不必计算,乘法的话可以根据矩阵乘法的规则,用循环求行和列的和,得出结果。转置矩阵的算法类似,先理解转置矩阵的意思,然后交换行号和列号即可。

(2) 程序关系图

(3) 函数功能描述

CreateMat()

创建稀疏矩阵的三元组表示法DispMat()

输出矩阵

TransMat()

相关文档