数据结构实验指导2

  • 格式:doc
  • 大小:91.00 KB
  • 文档页数:17

下载文档原格式

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

一、实验要求

⒈问题分析:充分地分析和理解问题本身,弄清要求做什么,包括功能要求、性能要求、设计要求和约束以及基本数据特性,数据间的联系等。

⒉数据结构设计:针对要求解决的问题,考虑各种可能的数据结构,并且力求从中出最佳方案(必须连同算法一起考虑),确定主要的数据结构及全程变量。对引入的每种数据结构和全程变量要详细说明其功能、初值和操作特点。

⒊算法设计:算法设计分概要设计和详细设计,概要设计着重解决程序的模块设计问题,包括考虑如何把程序自顶向下分解成若干顺序模块,并决定模块的接口,即模块间的相互关系以及模块之间的信息交换问题。详细设计则要决定每个模块内部的具体算法,包括输入、处理和输出,相当于C语言中具体的函数设计。

⒋测试用例设计:准备典型测试数据和测试方案,测试数据要有代表性、敏感性,测试方案包括模块测试和模块集成测试。

⒌上机调试并分析结果:对程序进行编译,纠正程序中可能出现的语法错误。测试前,先运行一遍程序看看究竟将会发生什么,如果错误较多,则根据事先设计的测试方案并结合现场情况进行错误跟踪。最后,详细记录实验过程,并对实验结果进行分析,并于一周内提交实验报告。

二、实验报告要求

1.实验报告格式:实验报告首页按学校统一印刷的实验报告模版书写。

2.实验报告内容:实验基本信息按照实验报告模版要求内容填写,不得有空项。其中:

☐实验预习报告内容包括:实验目的、任务、具体实验题目和要求;

☐实验操作原始记录与实验报告内容应包括如下主要内容:

算法设计思路简介

核心算法设计描述:可以用自然语言、伪代码或

流程图等方式

算法的实现和测试结果:包括算法时的输入、输

出,测试结果的分析与讨论,测试过程中遇到的

主要问题及所采用的解决措施。

☐附录可包括源程序清单或其它说明(如功能模块之间的调用与被调用关系等)

☐实验报告雷同者,本次实验成绩为0分或雷同实验报告平分得分

三、实验内容

实验一线性表应用

一. 实验目的

1、掌握用Turbo C或VC++上机调试线性表的基本方法;

2、掌握线性表的基本操作,如插入、删除、查找,以及线性

表合并等运算在顺序存储结构和链式存储结构上的运算;

并能够运用线性表基本操作解决问题,实现相应算法。二.实验题目

1.单链表基本操作练习

1)问题描述:在主程序中设计一个简单的菜单,分别调用相应的函数功能:

1…建立链表

2…连接链表

3…输出链表

0…结束

2)实验要求:在程序中定义下述函数,并实现所要求的函数功能:

CreateLinklist( ): 从键盘输入数据,创建一个单链表 ContLinklist( ):将前面建立的两个单链表首尾相连

OutputLinklist( ):输出显示单链表

3)实验提示:

✧单链表数据类型定义(C语言)

# include

typedef int ElemType; //元素类型

typedef struct LNode

{ ElemType data;

struct LNode *next;

}LNode,*LinkList;

✧为了算法实现简单,最好采用带头结点的单向链表。

4)注意问题:

✧重点理解链式存储的特点及指针的含义。

✧注意比较顺序存储与链式存储的各自特点。

✧注意比较带头结点、无头结点链表实现插入、删除算

法时的区别。

✧单链表的操作是数据结构的基础,一定要注意对这部

分的常见算法的理解。

2.约瑟夫环问题

1)问题描述:有编号为1, 2…n 的 n 个人按顺时针方向围坐一圈,每人持有一个正整数密码。开始给定一个正整数 m,从第一个人按顺时针方向自1开始报数,报到m者出列,不再参加报数,这时将出列者的密码作为m,从出列者顺时针方向的下一人开始重新自1开始报数。如此下去,直到所有人都出列。试设计算法,输出出列者的序列。

2)实验要求: 采用顺序和链式两种存储结构实现

3) 实现提示:

✧用顺序表来存储围座者的序号和密码(顺序存储结

构).

⏹用number 和code分别表示围座者的序号和密码.

假设围座者人数为 j,当前使用密码为m,开始报

数者位置为s, 那么下一出列者位置为s=(s+m-1)

mod j.

⏹当我们要在线性表的顺序存储结构上的第i个位

置上插入一个元素时,必须先将线性表的第i个

元素之后的所有元素依次后移一个位置,以便腾

空一个位置,再把新元素插入到该位置。若要删

除第i个元素时,也必须把第i个元素之后的所

有元素前移一个位置。

✧用链式存储解决此问题时可以采用循环链表.

4)注意问题:

✧顺序存储和链式存储实现此算法时计算出列位置的

不同方法,人员出列后所做操作的区别。

实验二栈与队列应用

一.实验目的

1.实验设置基本要求:通过实验掌握栈或队列的基本操作的

实现,并能灵活运用栈或队列特性,综合运用程序设计、

算法分析等知识解决实际问题。

2.实验设置较高要求:理解组成递归算法的基本条件,理解

递归算法与相应的非递归算法的区别,理解栈和队列的应

用与作用。

二.实验题目

1.算术表达式求值演示

1)问题描述:从键盘输入一个算术表达式并输出它的结果

2)实验要求:算术表达式可包含加、减、乘、除、十进制整数和小括号,利用栈实现。

3) 实现提示:

✧表达式作为一个串存储,如表达式“3*2-(4+2*1)”,

其求值过程为:自左向右扫描表达式,当扫描到3*2

时不能马上计算,因后面可能还有更高的运算,正确

的处理过程是:

⏹需要两个栈:对象栈OPND和算符栈OPTR;

⏹自左至右扫描表达式, 若当前字符是运算对象,

入OPND栈;