《数据结构与算法》实验指导书
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-7-
实验二 栈的应用之表达式求值
一、实验目的 1、掌握栈的特点(先进后出 FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和 链式存储结构,以便在实际问题背景下灵活应用。 2、掌握栈在表达式求值算法中的应用,并掌握表达式求值算法。 二、实验内容 输入一个位数的数学表达式,如6+3*(9-5)/2-8,并将运行程序后将结果显示在屏幕 上。 [扩展内容] 在此基础上实现十位数的加减乘除(带括号)的数学表达式运算。 三、实验要求 1.用 C++/C 完成算法设计和程序设计并上机调试通过。 2. 实验过程中学生调试完成,需向教师演示实验过程和结果。 3.撰写实验报告,提供实验结果和数据,实验测试表达式尽可能考虑到所有的输入情 况,并给出每次测试表达式的实验结果。 4.分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要 给出算法设计小结和心得。 5. 采用上机情况、程序质量、实验报告相结合的形式,满分为 100 分。 (1)上机情况(30%) :包括出勤情况、调试表现、是否上网、玩游戏。 (2)程序质量(50%) (3)实验报告(20%) 四、程序实现(要求附主要程序清单) 写出每个操作的算法(操作过程) 1.表达式求值的算法思想 使用数据栈有: 算符栈 OPTR:有效算符; 操作数栈 OPND:有效操作数,运算结果。 (1)初始化:OPND 置为空栈,将#放入 OPTR 栈底。 (2)依次读入表达式中的每个字符,若是操作数,则入 OPND 栈;若是算符,则和 OPTR 栈顶算符进行优先级比较: I 若栈顶算法优先,则执行相应运算,结果存入 OPND 栈; II 若与栈顶算符相等,则作()或##处理; III 若栈顶算符低于,该算符入 OPTR 栈。 (3)重复(2) ,直到表达式求值完毕(读入的是#,且 OPTR 栈顶元素也为#)
struct LNode *next; }LNode,*LinkList;
2.在链表 L 中第 i 个元素之前插入数据元素 e Status ListInsert_L(LinkList &L,int i,ElemType e) 3. 删除链表 L 中第 i 个数据元素 Status ListDelete_L(LinkList &L,int i,ElemType &e) 4.创建带头结点的具有 n 结点的单链表 void CreateList_F(LinkList &L,int n) 五、写出输入数据及运行结果 写出可能出现的输入数据及运行结果。
实验要求: 掌握递归的特点,编写二叉树的创建和遍历基本操作的实现程序。
-5-
实验内容: 输入一个表示二叉树的字符序列;运行前序、中序和后序遍历算法,将遍 历后的结果显示中屏幕上。 在此基础上实现对二叉树的中序遍历算法的非递归实 现和广度优先遍历(层序遍历)的实现。 实验四 图的遍历操作 实验要求: 以邻接矩阵方式来保存图, 实现这种存储方式下创建一个图的算法。然后分 别使用深度优先遍历算法和广度优先遍历算法对刚才创建的图进行遍历。 实验内容: 1、以邻接矩阵方式来保存图,实现这种存储方式下创建一个图的算法。 2、创建一个图,然后对这个图进行深度优先遍历和广度优先遍历。 实验五 查找与排序 实验要求: 1、掌握折半查找算法。 2、掌握希尔排序和快速排序算法。 实验内容: 1、实现折半查找算法。 2、实现希尔排序和快速排序 六、考核方式 根据学生的实验预习、 实验纪律、实验动手能力及实验报告结果进行综合评 定。对缺实验成绩者,本课程不予通过。 七、大纲使用说明: 本大纲所所规划的实验均为基础性和综合性实验,也是学生必做实验。实验 分计入本门课程的总成绩的 30%。 八、实验指导书、参考书 《数据结构与算法实验指导书》.蒋娜编.2016 年 9 月
——软件与通信工程学院
《数据结构与算法》 实验指导书
江西财经大学软件与通信工程学院通信工程系 2016 年 9 月
-1-
目录
写在上机实验之前 ........................................................................................................... - 3 《数据结构与算法(电子)》课程实验教学大纲 ....................................................... - 4 实验一 线性表链式表示和实现 ..................................................................................... - 7 实验二 栈的应用之表达式求值 ..................................................................................... - 8 实验三 二叉树的遍历操作 ......................................................................................... - 10 实验四 图的遍历操作 ................................................................................................... - 13 实验五 查找与排序 ....................................................................................................... - 16 -
-8-
2.算符优先关系表(见表 1) (C1:栈顶元素 C2:读到算符)
3.算法的类 C 语言描述: int express( ) { Stack_Init(OPTR);Stack_Push(OPTR, ’#’)’; /* 运算符栈 */ Stack_Init(OPND); w=getchar(); while(w!= ’#’|| Stack_GetTop(OPTR)!= ’#’) /* ’#’是表达式结束的标记,也是运算符栈为空的标记 */ { if(!In(w,OP)) { Stack_Push(OPND,w);w=getchar();} /* 不是运算符的情况 else /* 判断运算符栈顶元素和新输入运算符的优先权 */ /* 运算数栈 */
-3-
《数据结构与算法(电子) 》课程实验教学大纲
课程名称:数据结构与算法(电子) 英文名称:Data Structure and Algorithms(Electronics) 课程编号:17913 课程负责人:尧文元 大纲主撰人:蒋娜 一、学时、学分 课程总学时:48 课程总学分:3 二、适用专业及年级 2014 级电子信息工程、通信工程、物联网工程 三、实验教学目的与基本要求 通过上机操作, 力求能够加深学生对课堂讲授内容的理解,掌握基本数据结 构:集合、线性结构、树形结构、图状结构的基本操作实现和在求解实际问题中 的应用, 进一步熟悉高级程序设计语言的编程环境及其编程规则,同时培养学生 书写规范文档的习惯, 要求学生具有编制相当规模的程序的能力,养成良好的程 序设计风格。 对学生上机实验的要求如下: (1)上机实验之前,学生应当为每次上机的内容作好充分准备。对每次上 机需要完成的题目进行认真的分析,列出实验具体步骤,写出符合题目要求的程 序清单,准备出调试程序使用的数据,以便提高上机实验的效率。 (2) 按照实验目的和实验内容以及思考题的要求进行上机操作。录入程序, 编译调试,反复修改,直到使程序正常运行,得出正确的输出结果为止。 (3)根据实验结果,写出实验报告。实验报告应当包括:实验题目,实验 目的,实验要求,程序实现,实验结果以及分析讨论等内容。 四、主要仪器设备及消耗品 硬件最低要求:586 微型计算机,主频 450MHZ 以上,内存 64MB 以上,硬
-2-
写在上机实验之前
上机实践是学生对本门课程所学知识的一种全面、综合的能力训练,是与课堂听 讲、自学和练习相辅相成的必不可少的一个教学环节,也是对课堂教学与实践教学效 果的一种检验。通常,实验项目中的问题比平时的习题复杂得多,也更接近实际。实 习着眼于原理与应用的结合,使学生学会如何把书上学到的知识运用于解决实际问题 的过程中去,培养从事软件开发设计工作所必需的基本技能;另一方面,能使书上的 知识变“活”,起到深化理解和灵活掌握教学内容的目的。平时的练习较偏重于如何 编写功能单一的“小”算法,而实验题是软件设计的综合训练,包括问题分析,总体 结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工 程规范的训练和科学作风的培养。此外,还有很重要的一点是:机器是比任何教师都 严厉的主考者。 为了达到上述目的,本篇安排了 5 个实验项目,各项目的训练重点在于基本的数 据结构,而不强调面面俱到。各实验单元与教科书的各章具有紧密的对应关系,在个 别实验单元中安排有难度差别不等的拓展练习,以便学生选做。 此外,每个实验题采取了统一的格式,实验目的、实验内容、实验要求、源程序 清单、程序运行情况等 5 个部分组成。
-4-
实验课性质:必修
大纲审核人:尧文元
实验学时:24 实验学分:0
盘 10G,有软驱。每个学生每次上机实验使用一台计算机。 软件:Turbo C 或 Visual C++6.0 五、实验课程内容和学时分配
序 号 1 2 3 实验项目名称 线性表链式表 示和实现 栈的应用之表 达式求值 二叉树的遍历 操作 实 验 学 分 实验 时数 3 6 3 每 组 人 数 1 1 wenku.baidu.com 实验 类型 基础 综合 综合 实验 要求 必做 必做 必做 实验 类别 专业 专业 专业 内容提要 实现链表的建立,插入、删除 等基本操作 实现个位数的加减乘除(带括 号)的数学表达式的运算 实现二叉树的建立、递归的遍 历算法和层序遍历算法的实 现 以邻接矩阵方式来保存图,实 现这种存储方式下创建一个 图的算法。然后分别使用深度 优先遍历算法和广度优先遍 历算法对刚才创建的图进行 遍历。 实现折半查找算法。 实现希尔排序或者快速排序。
4
图的遍历操作
6
1
综合
必做
专业
5
查找与排序
6
1
基础
必做
专业
实验一 线性表链式表示和实现 实验要求: 编写具有链表的创建、插入和删除基本操作的程序。 实验内容: 输入链表的各个数据域的值,同时显示创建的链表结点数据;实现在第i 个结点的之前插入一个新的结点,并显示插入后的链表结点情况;实现将第i个 结点删除,并将删除后的链表结点情况显示出来。 实验二 栈的应用之表达式求值 实验要求: 掌握栈在表达式求值算法中的应用。 实验内容: 输入一个个位数的数学表达式,如6+3*(9-5)/2-8,并将运行程序后将结果 显示在屏幕上。 扩展要求: 在此基础上实现十位数的加减乘除(带括号)的数学表达式运算。 实验三 二叉树的遍历操作
-6-
实验一 线性表链式表示和实现
一、实验目的 1.掌握用 C 语言调试程序的基本方法。 2.掌握线性表的基本运算,如创建、插入、删除等。 二、实验内容 输入链表的各个数据域的值,同时显示创建的链表结点数据;实现在第 i 个结点的之 前插入一个新的结点,并显示插入后的链表结点情况;实现将第 i 个结点删除,并将删除后 的链表结点情况显示出来。 三、实验要求 1.用 C++/C 完成算法设计和程序设计并上机调试通过。 2. 实验过程中学生调试完成,需向教师演示实验过程和结果。 3.撰写实验报告,提供实验结果和数据。 4.分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要 给出算法设计小结和心得。 5. 采用上机情况、程序质量、实验报告相结合的形式,满分为 100 分。 (1)上机情况(30%) :包括出勤情况、调试表现、是否上网、玩游戏。 (2)程序质量(50%) (3)实验报告(20%) 四、程序实现(要求附主要程序清单) 写出每个操作的算法(操作过程) 。 1.结点和单链表的 C 语言描述 typedef struct LNode{ ElemType data; //数据域 //指针域