2012级算法与数据结构实验指导书18

合集下载

2012版《数据结构A》课程实验指导书

2012版《数据结构A》课程实验指导书

2012版《数据结构A》课程实验指导书《数据结构A》课程实验指导书Data Structure Course Design课程编号:06311360 学时:15 学分:1先修课程:程序设计基础、⾯向对象程序设计适⽤专业:计算机科学与技术、⽹络⼯程、软件⼯程⼀、实验⽬的《数据结构A》课程是计算机科学与技术及其相关专业的⼀门重要的专业基础课。

在课堂教学中,⽐较全⾯、概括性地讲述数据结构学科中⼀些基础性知识、重要概念及各种算法,通过该实验教学和学⽣的上机实践,将这些基础性知识、重要概念及各种算法,在计算机上编程实现,使学⽣能够达到以下实验教学⽬标:1.掌握计算机处理数据的基本⽅法;2.了解算法的时间及空间分析⽅法;3.能够为实际应⽤所涉及的数据选择适当的逻辑结构、存储结构及相应的算法;4.通过在计算机上编程实现课程中介绍的各种算法,在程序设计能⼒⽅⾯得到提升。

⼆、上机实验总体要求1.每位同学准备⼀个实验本,上机前作好充分的准备⼯作,预习本次实验的内容,事先熟悉与实验有关的软硬件环境,编写好程序代码,供上机时使⽤。

2.实验时遵守实验室的规章制度,爱护实验设备,原则上每⼈固定实验设备,对于实验设备出现的问题,要及时向指导⽼师汇报。

3.编程序过程中要注意多存盘,避免由于死机等原因造成的不必要的重复录⼊。

4.内部⽂档要求:每个源⽂件和头⽂件都必须在⽂件⾸部的注释中注明设计者姓名,项⽬名(即我们的上机题⽬名),创建⽇期和最近⼀次修改⽇期。

包含main()函数的源⽂件必须在⾸部注释后另加⼀段注释,简要描述⼀下程序的⽬的和⽤到的主要数据结构。

⽂件注释格式如下:⽂件名称:项⽬名称:创建者:创建时间:最后修改时间:功能:⽂件中的函数名称和简单功能描述:⽂件中定义的全局变量和简单功能描述:⽂件中⽤到的他处定义的全局变量及其出处:与其他⽂件的依赖关系:◆每个类必须包含⾸部注释块,适度地描述这个类的⽬的。

类的⾸部注释应该紧挨着放在类的声明(⼀般在头⽂件⾥)前⾯。

数据结构与算法实习_实验指导书

数据结构与算法实习_实验指导书

数据结构与算法实习_实验指导书数据结构与算法课程实习实验指导书目录实验一顺序表的基本操作 (2)实验二链表的基本操作 (3)实验三二叉树的基本操作 (4)实验四综合应用 (5)附录A 实验报告示例 (9)附录B实验报告封面、评语得分表 (12)实验一顺序表的基本操作【实验目的】1、掌握顺序存储的概念,学会对顺序表的基本操作。

2、加深对顺序存储数据结构的理解,逐步培养解决实际问题的能力。

【实验性质】设计型实验【实验内容】1、实现顺序表显示;2、实现顺序表插入;3、实现顺序表查找(显示比较次数);4、实现顺序表删除(显示移动次数);5、实现顺序表排序(分别实现简单选择、快速,显示比较次数、移动次数);6、实现顺序表的折半查找(显示比较次数);7、编程实现一个顺序表的就地逆置,即利用原表的存储空间将顺序表逆置;8顺序表有序插入(显示比较次数、移动次数),屏幕提示后,从键盘输入一个元素值,在经过排序的线性表中插入这个元素;屏幕显示比较次数和移动次数,应有溢出判断和报告;9、要求以较高的效率实现删除顺序表中元素值在x到y(x和y自定)之间的所有元素;10、编程实现将两个非递减的顺序表进行合并,要求同样的数据元素只出现一次;*11、编程实现顺序表的shell排序(步长为5, 3,1);*12、编程实现堆排序算法;*13、利用三元组顺序表存储矩阵,实现矩阵的转置(请独立写程序实现)。

【实验环境】VC++ 6.0【实验要求】将如上文件保存在命名为学号+姓名”勺文件夹中并上传到指定的服务器。

实验二链表的基本操作【实验目的】1、掌握链表的概念,学会对链表进行操作。

2、加深对链式存储结构的理解,逐步培养解决实际问题的编程能力。

【实验性质】设计型实验【实验内容】1、实现单链表的创建;2、实现单链表的显示;3、实现单链表的查找(显示比较次数);4、实现单链表的插入;5、实现单链表的删除(显示比较次数);6、对已创建的链表(数据不限)进行直接插入排序;7、将链接存储线性表逆置,即最后一个结点变成第1个结点,原来倒数第2个结点变成第2个结点,如此等等;8、生成有序的两个单链表A和B (链表的数据和个数自定),其首结点指针分别为a 和b,要求将两个单链表合并为一个有序的单链表C,其首结点指针为c,并且合并后的单链表的数据不重复;9、将一个首结点指针为a的单链表A分解成两个单链表A和B,其首结点指针分别为a和b,使得链表A中含有原链表A中序号为奇数的元素,而链表B中含有原链表A中序号为偶数的元素,且保持原来的相对顺序;10、请编程实现链栈的基本操作函数,并通过调用这些基本函数,实现十进制和八进制转换的功能。

《数据结构》实验指导书

《数据结构》实验指导书
四、实验说明
1.单链表的类型定义
#include <stdio.h>
typedef int ElemType;//单链表结点类型
typedef struct LNode
{ElemType data;
struct LNode *next;
2.明确栈、队列均是特殊的线性表。
3.栈、队列的算法是后续实验的基础(广义表、树、图、查找、排序等)。
六、实验报告
根据实验情况和结果撰写并递交实验报告。
实验四 串
一、预备知识
1.字符串的基本概念
2.字符串的模式匹配算法
二、实验目的
1.理解字符串的模式匹配算法(包括KMP算法)
typedef struct
{ElemType *base;
int front,rear;
} SqQueue;
4.单链队列的类型定义
typedef struct QNode
{QElemType data;
typedef struct list
{ElemType elem[MAXSIZE];//静态线性表
int length; //顺序表的实际长度
} SqList;//顺序表的类型名
五、注意问题
1.插入、删除时元素的移动原因、方向及先后顺序。
4.三元组表是线性表的一种应用,通过它可以更好地理解线性表的存储结构。同时矩阵又是图的重要的存储方式,所以这个实验对更好地掌握线性表对将来对图的理解都有极大的帮助。
六、实验报告
根据实验情况和结果撰写并递交实验报告。
实验六 树和二叉树
一、预备知识
1.二叉树的二叉链表存储结构

《数据结构》实验指导书 2012最新版

《数据结构》实验指导书 2012最新版

目录实验一线性表基本操作的编程实现 (1)实验二堆栈或队列基本操作的编程实现 (8)实验三串基本操作的编程实现 (14)实验四二维数组基本操作的编程实现 (18)实验五二叉树基本操作的编程实现 (20)实验六图基本操作的编程实现 (33)实验七查找技术的编程实现 (43)实验八排序技术的编程实现 (49)附录一实验常见问题问答 (56)附录二如何准备实验 (56)附录三如何写实验报告 (57)附录四实验报告书写标准 (57)(特别提示:程序设计包含两个方面的错误。

其一是语法错误,其二是功能错误。

为了提高学生的编程和调试能力,本指导书给出的程序代码并不保证没有上述的两种错误。

并且也不保证程序的完整性,有一些语句已经故意删除,就是要求学生自己编制完成,这样才能达到我们的教学要求。

希望大家以自己所学高级语言的基本功和数据结构原理的思考点为基础,不要过于依赖给出的参考代码,这样才能有所进步。

如果学生能够根据要求完全自己编制,那就更好了。

)实验一线性表基本操作的编程实现【实验目的】线性表基本操作的编程实现要求:线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构要求是链表存储结构(顺序存储结构建议作为课外实验完成),可以依次完成主要功能来体现功能的正确性,用菜单进行管理完成大部分功能,要求可以重复运行。

还鼓励学生利用基本操作进行一些更实际的应用型程序设计。

【实验性质】验证性实验(学时数:2H)【实验内容】1.线性表的链表存储,实现数据插入、删除运算。

为了体现功能的正常性,同时要编制数据输入函数和遍历函数,数据输入可以用1.键盘输入 2.内部预置数据 3.计算机自动给出 4.文件读入。

最好同时提供多种方式。

2.其他建议改进的功能或细节:存储结构修改为循环链表、双向链表、双向循环链表、静态链表等。

3.实验要求带头结点,提高编程能力可以把头结点故意去掉,看看那些语句有变化,编程增加了多少工作量。

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。

具体而言,实验的目的包括:1、加深对常见数据结构(如数组、链表、栈、队列、树、图等)的理解,掌握其特点和操作方法。

2、培养学生运用数据结构解决实际问题的能力,提高算法设计和程序实现的能力。

3、增强学生的逻辑思维能力和调试程序的能力,培养学生的创新意识和团队合作精神。

二、实验环境1、操作系统:Windows 或 Linux 操作系统。

2、编程语言:C、C++、Java 等编程语言中的一种。

3、开发工具:如 Visual Studio、Eclipse、Code::Blocks 等集成开发环境(IDE)。

三、实验要求1、实验前,学生应认真预习实验内容,熟悉相关的数据结构和算法,编写好实验程序的代码框架。

2、实验过程中,学生应独立思考,认真调试程序,及时记录实验过程中出现的问题及解决方法。

3、实验完成后,学生应撰写实验报告,包括实验目的、实验内容、实验步骤、实验结果、问题分析与解决等。

四、实验内容(一)线性表1、顺序表的实现与操作实现顺序表的创建、插入、删除、查找等基本操作。

分析顺序表在不同操作下的时间复杂度。

2、链表的实现与操作实现单链表、双向链表的创建、插入、删除、查找等基本操作。

比较单链表和双向链表在操作上的优缺点。

(二)栈和队列1、栈的实现与应用实现顺序栈和链式栈。

利用栈解决表达式求值、括号匹配等问题。

2、队列的实现与应用实现顺序队列和链式队列。

利用队列解决排队问题、广度优先搜索等问题。

(三)树1、二叉树的实现与遍历实现二叉树的创建、插入、删除操作。

实现二叉树的前序、中序、后序遍历算法,并分析其时间复杂度。

2、二叉搜索树的实现与操作实现二叉搜索树的创建、插入、删除、查找操作。

分析二叉搜索树的性能。

(四)图1、图的存储结构实现邻接矩阵和邻接表两种图的存储结构。

12级数据结构与算法课程设计指导书

12级数据结构与算法课程设计指导书

长沙学院课程设计指导书系(部)计算机科学技术专业软件工程(服务外包)2013年12月1 日课程名称:数据结构与算法课程设计课程编号:JX主笔人:刘钢钦主审人:潘怡一、课程设计的目的1 巩固与加深对课程内容的理解。

通过应用程序的设计过程,使学生加深对课程内容的理解,巩固所学的专业基础知识。

2 熟悉开发工具的使用。

通过编制与上机调试程序,使学生逐步积累编制与调试程序的经验,促进实践能力提高。

3 培养与增强学生的综合运用能力。

通过有一定实用价值的应用程序的开发,激发学生的学习兴趣,促进学生综合运用能力的提高。

4培养与增强学生的自学能力和利用文献的能力。

二、课程设计的题目为了充分调动学生的学习积极性与主动性,适应不同兴趣、不同程度的学生对课程设计的要求,本课程设计提供四个任选题。

每个学生可以根据本人的兴趣及能力选择教师指定的选题,也可以自定其他的选题。

1、一元多项式计算问题2、迷宫问题3、利用二叉排序树对顺序表进行排序4、交通咨询系统5、内部排序算法的比较三、设计内容1、一元多项式计算问题问题描述:设计一个稀疏多项式简单计算器基本要求:(1)输入并分别建立多项式A和B(2)输入输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……,其中n是多项式的项数,ci和ei是第i项的系数和指数,序列按指数降序排列(3)完成两个多项式的相加、相减,并将结果输出;测试数据:(1) A+B A= 3x14-8x8+6x2+2 B=2x10+4x8+-6x2(2) A-B A=11x14+3x10+2x8+10x6+5 B=2x14+3x8+5x6+7(3) A+B A=x3+x1B=-x3-x1(4) A+B A=0 B=x7+x5+x3+x1(5) A-B A=100x100+50x50+20x20+x B=10x100+10x50+10x20+x选作内容:(1).多项式在x=1时的运算结果(2)求多项式A和B的乘积2、迷宫问题问题描述:以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

数据结构与算法基础实验指导书

数据结构与算法基础实验指导书

数据结构与算法基础实验指导书实验1 线性表及其应用实验目的1.掌握线性表顺序存储结构的特点及线性表在顺序存储结构中各种基本操作的实现。

2.掌握线性表链式存储结构的特点及线性表在链式存储结构中各种基本操作的实现。

3.重点巩固和体会线性表在链式存储结构上的各种操作和应用。

实验要求对学生要求:1.掌握单向链表的存储特点及其实现。

2.掌握单向链表的插入、删除算法及其应用算法的程序实现。

3.掌握多项式的代数运算算法。

4.根据算法编写与实验内容相关的程序,要求该程序的多项式动态输入输出。

对实验指导教师要求:1.掌握单向链表的存储特点及其实现。

2.掌握单向链表的插入、删除算法及其应用算法的程序实现。

3.编写并运行该题目程序代码,具有该题目的参考答案。

5.深刻理解题目内涵,能够清晰描述问题,掌握该题目涉及的知识点,指导学生实验时需要注意的问题。

实验内容采用链式结构实现任意多项式的存储,求两个多项式的和。

实验评分标准一.课堂表现(10分)1.出勤情况(按时,迟到,早退,缺席)2.是否遵守课堂纪律二.实验结果(50分)1.当堂按时完成(10)2.独立完成(10),(和同学协商完成,在老师帮助下完成)3.结果正确无误(10)4.功能齐全,界面美观,具有较好演示效果(10)5.在源程序中有必要的注释和说明(5)6.程序文档齐全(5)三.实验报告(40)1.对预习要求的回答(10)2.实验过程中遇到的问题如何解决的(10)3.实验的体会(10)4.思考题(10)实验2 树及其应用实验目的1.掌握树的链式存储方式及其操作实现(创建、遍历、查找等)。

2.掌握二叉树用不同方法表示所对应的不同输入形式。

3.掌握二叉树中各种重要性质在解决实际问题中的应用。

4.掌握哈夫曼树的构造方法及其编码方法。

5.掌握二叉排序树的特性及其构造方法。

实验要求对学生要求:1.掌握二叉树的链式存储特点及其实现。

2.掌握二叉树的创建、遍历、查找算法及其程序实现。

《数据结构与算法分析课程设计》任务书2012版

《数据结构与算法分析课程设计》任务书2012版

《数据结构与算法分析课程设计》任务书2012版任务书一、任务背景数据结构与算法是计算机科学与技术专业的重要课程之一,旨在培养学生分析和解决复杂问题的能力。

本课程设计主要通过一个真实案例,让学生深入理解数据结构与算法的应用,并能够独立完成相应的设计和开发任务。

二、任务目标1. 掌握数据结构与算法的基本概念和原理。

2. 能够分析问题需求,设计合适的数据结构与算法解决方案。

3. 能够独立完成课程设计,并能进行有效的测试和调试。

三、任务要求1. 学生根据给定的案例,自行选择实现语言和开发环境。

2. 实现一个能够对输入的数据进行处理的程序,要求程序能够正确处理各种边界情况。

3. 程序设计要求使用合理的数据结构和算法,保证程序的运行效率和资源利用率。

4. 程序要求具备良好的用户界面,可以直观地显示程序的运行结果。

5. 程序应回归测试要求覆盖到各种情况,并能够快速定位和修复问题。

6. 学生需要在规定的时间内完成程序设计,并进行提交和展示。

四、任务安排1. 学生在完成任务前需要对数据结构与算法的相关知识进行系统学习。

2. 学生需在规定时间内完成项目的需求分析和整体设计。

3. 学生需按照设计要求进行程序的开发和功能测试。

4. 学生需要撰写完整的设计文档和用户手册,并进行提交。

5. 学生需按时进行项目的汇报和展示。

五、任务考核1. 根据学生提交的设计文档和用户手册进行初步评估。

2. 进行功能和性能测试,评估程序的稳定性和可靠性。

3. 根据学生的汇报和展示内容进行最终评定。

4. 综合考虑学生的完成情况和表现,给予相应的得分和评价。

六、参考要求1. 参考书目:《算法导论》、《数据结构与算法分析》等。

2. 参考案例:从现实生活中选取一个相关案例,如银行排队系统、图书管理系统等。

七、附件附件1:数据结构与算法课程设计案例(具体案例请参考附件1)八、备注任务书的内容根据2012版的数据结构与算法分析课程设计要求编写,要求学生完成相应的设计和开发任务。

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

《算法与数据结构》实验指导书实验课程类别:课程内实验实验课程性质:必修适用专业、年级:2012级计算机大类开课院、系:计算机科学与工程学院学时:18编写依据:《算法与数据结构》实验教学大纲修订时间:2014年2月《算法与数据结构》课程实验指导书(以下简称:指导书)是针对计算机学院所开设的对应课程的上机实验而编写的教学文件,供学生上机实验时使用。

上机的工作环境要求:Windows 2000或以上操作系统、VC++ 6.0或者其它高级程序设计语言。

学生应按指导教师的要求独立完成实验,并按要求撰写实验报告。

每一个实验,编程上机调试并且提交电子文档实验报告,以学号姓名作为文件名上传。

报告内容至少包含如下内容:1、学生基本情况:专业班级、学号、姓名2、实验题目、实验内容3、设计分析4、源程序代码5、测试用例(尽量覆盖所有分支)6、实验总结一.实验内容与学时分配序次实验题目实验类型基本技能训练学时一线性结构综合应用基础性(1)掌握线性结构的常用操作;(2)能够应用线性结构解决比较简单的问题。

10二非线性结构综合应用设计性(1)掌握树形、图形结构的插入、删除、查找等算法;(2)能够应用二叉树解决比较简单的问题。

4三查找技术综合应用设计性(1)熟练掌握查找的常用算法;(2)设计和应用查找算法解决简单的实际问题。

2四排序技术综合应用基础性(1)熟练掌握常用的排序方法,并掌握用高级语言实现排序算法的方法;(2)深刻理解排序的定义和各种排序方法的特点,并能加以灵活应用;(3)了解各种方法的排序过程及其依据的原则,并掌握各种排序方法的时间复杂度的分析方法。

2二.实验说明实验一、线性结构综合应用(一)顺序表的应用1、实验目的:(1)掌握用VC++上机调试线性表的基本方法;(2)掌握顺序表的存储结构以及基本运算的实现。

2、实验内容约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数。

从第一个人开始顺时针方向自1起顺序报数,报到m时停止并且报m的人出列,再从他的下一个人开始重新从1报数,报到m时停止并且报m的人出列。

如此下去,直到所有人全部出列为止。

要求设计一个程序模拟此过程,对任意给定的m和n,求出出列编号序列。

3、实验要求:用顺序表实现。

(二)链表的应用1、实验目的:(1)熟练掌握链表结构及有关算法的设计;(3)掌握用链表表示特定形式的数据的方法,并能编写出有关运算的算法。

2、实验内容:一元多项式求和。

把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。

3、实验说明:一元多项式可以用单链表表示,结点结构图示如下:coef exp next一元多项式链表的结点结构一元多项式算法伪代码如下:1. 工作指针p、q初始化;2. while(p存在且q存在)执行下列三种情形之一2.1 如果p->exp<q->exp,则指针p后移;2.2 如果p->exp>q->exp,则2.2.1 将结点q插入到结点p之前;2.2.2 指针q指向原指结点的下一个结点;2.3 如果p->exp=q->exp,则2.3.1 p->coef =p->coef+q->coef;2.3.2 如果p->coef ==0,则执行下列操作,否则,指针p后移;2.3.2.1 删除结点p;2.3.2.2 使指针p指向它原指结点的下一个结点;2.3.3 删除结点q;2.3.4 使指针q指向它原指结点的下一个结点;3. 如果q不为空,将结点q链接在第一个单链表的后面;(三)栈的应用1、实验目的:(1)掌握栈的特点及其存储方法;(2)掌握栈的常见算法以及程序实现;(3)了解递归的工作过程。

2、实验内容:表达式求值问题。

这里限定的表达式求值问题是:用户输入一个包含“+”、“-”、“*”、“/”、正整数和圆括号的合法数学表达式,计算该表达式的运算结果。

算术表达式求值过程是:STEP 1:先将算术表达式转换成后缀表达式。

STEP 2:然后对该后缀表达式求值。

3、实验说明:在设计相关算法中用到栈,这里采用顺序栈存储结构。

中缀表达式exp 后缀表达式postexp伪代码如下:初始化运算符栈op;将'='进栈;从exp读取字符ch;while (ch!='\0'){ if (ch不为运算符)将后续的所有数字均依次存放到postexp中,并以字符'#'标志数值串结束;elseswitch(Precede(op栈顶运算符,ch)){case '<': //栈顶运算符优先级低将ch进栈; 从exp读取下字符ch; break;case '=': //只有栈顶运算符为'(',ch为')'的情况退栈; 从exp读取下字符ch; break;case '>': //栈顶运算符应先执行,所以出栈并存放到postexp中退栈运算符并将其存放到postexp中; break;}}若字符串exp扫描完毕,则将运算符栈op中'='之前的所有运算符依次出栈并存放到postexp中。

最后得到后缀表达式postexp;对后缀表达式postexp求值伪代码如下:while (从postexp读取字符ch,ch!='\0'){ 若ch为数字,将后续的所有数字构成一个整数存放到数值栈st中。

若ch为“+”,则从数值栈st中退栈两个运算数,相加后进栈st中。

若ch为“-”,则从数值栈st中退栈两个运算数,相减后进栈st中。

若ch为“*”,则从数值栈st中退栈两个运算数,相乘后进栈st中。

若ch为“/”,则从数值栈st中退栈两个运算数,相除后进栈st中(若除数为零,则提示相应的错误信息)。

}若字符串postexp扫描完毕,则数值栈op中的栈顶元素就是表达式的值。

出 轨 入 轨581 H 1 H 3 H 2 963742 出 轨入 轨58H 1H 3 H 2 96 74321出 轨 入 轨 5 H 1 H 3 H 2 96 8754321 出 轨 入 轨H 1H 3H 2987654321(a) 将369、247依次入缓冲轨(b) 将1移至出轨,234移至出轨(c) 将8入缓冲轨,5移至出轨 (d) 将6789移至出轨 (四) 队列的应用1、实验目的:(1)掌握队列的特点及其存储方法; (2)掌握队列的常见算法和程序实现。

2、实验内容:火车车厢重排问题。

3、实验说明:转轨站示意图如下:火车车厢重排过程如下:火车车厢重排算法伪代码如下:出 轨入 轨 581742963 987654321H 1H 3 H 21. 分别对k 个队列初始化;2. 初始化下一个要输出的车厢编号nowOut = 1;3. 依次取入轨中的每一个车厢的编号; 3.1 如果入轨中的车厢编号等于nowOut ,则3.1.1 输出该车厢;3.1.2 nowOut++;3.2 否则,考察每一个缓冲轨队列for (j=1; j<=k; j++)3.2.1 取队列 j 的队头元素c ;3.2.2 如果c=nowOut ,则3.2.2.1 将队列 j 的队头元素出队并输出;3.2.2.2 nowOut++;3.3 如果入轨和缓冲轨的队头元素没有编号为nowOut 的车厢,则 3.3.1 求小于入轨中第一个车厢编号的最大队尾元素所在队列编号j;3.3.2 如果 j 存在,则把入轨中的第一个车厢移至缓冲轨 j ;3.3.2 如果 j 不存在,但有多于一个空缓冲轨,则把入轨中的第一个车厢移至一个(五) 稀疏矩阵的应用1、实验目的:(1)掌握掌握稀疏矩阵的表示方法及其运算的实现;(2)实现稀疏矩阵在三元组、十字链表等表示下的各运算并分析其效率。

2、实验内容在m×n 的矩阵中,有t 个非零元。

令δ= t/(m*n),称δ矩阵的稀疏因子,常认为δ≤0.05时称为稀疏矩阵。

稀疏矩阵在工程中有着大量的应用,不少工程问题都可以转化为对稀疏矩阵的计算问题。

用三元组表实现稀疏矩阵的转置,用(顺序取,直接存)方法。

3、实验说明: 引入两个数组作为辅助数据结构: num[nu]:表示矩阵A 中某列的非零元素的个数; cpot[nu]:初始值表示矩阵A 中某列的第一个非零元素在B 中的位置。

num 与cpot 递推关系:三元组表实现稀疏矩阵的转置(顺序取,直接存)算法伪代码如下:cpot[0]=0;cpot[col]=cpot[col -1]+num[col -1]; 1≤col<nu1. 设置转置后矩阵B 的行数、列数和非零元素的个数;2. 计算A 中每一列的非零元素个数;3. 计算A 中每一列的第一个非零元素在B 中的下标;4. 依次取A 中的每一个非零元素对应的三元组;4.1 确定该元素在B 中的下标pb ;4.2 将该元素的行号列号交换后存入B 中pb 的位置; 4.3 预置该元素所在列的下一个元素的存放位置;实验二、非线性结构综合应用(六) 树的应用1、实验目的:(1)针对问题的实际要求,正确应用树形结构组织和存储数据; (2)掌握二叉树的存储方法。

(3)掌握二叉树的各种遍历方法。

2、实验内容: 二叉树后序遍历的非递归算法。

3、实验说明:二叉树后序遍历的非递归算法:结点要入两次栈,出两次栈;为了区别同一个结点的两次出栈,设置标志flag ,当结点进、出栈时,其标志flag 也同时进、出栈。

设根指针为root ,则可能有以下两种情况:⑴ 若root!=NULL ,则root 及标志flag (置为1)入栈,遍历其左子树; ⑵ 若root=NULL ,此时若栈空,则整个遍历结束;若栈不空,则表明栈顶结点的左子树或右子树已遍历完毕。

若栈顶结点的标志flag=1,则表明栈顶结点的左子树已遍历完毕,将flag 修改为2,并遍历栈顶结点的右子树;若栈顶结点的标志flag=2,则表明栈顶结点的右子树也遍历完毕,输出栈顶结点。

二叉树后序遍历的非递归算法伪代码如下:(七) 图的应用1、实验目的:(1)熟练掌握图的基本存储方法;(2)熟练掌握图的深度优先和广度优先搜索方法; (3)掌握AOV 网和拓扑排序算法; (4)掌握AOE 网和关键路径。

2、实验内容:拓扑排序。

任意给定一个有向图,设计一个算法,对它进行拓扑排序。

拓扑排序算法思想:a.在有向图中任选一个没有前趋的顶点输出;b.从图中删除该顶点和所1 第一次出栈,只遍历完左子树,该结点不能访问2 第二次出栈,遍历完右子树,该结点可以访问flag = 1. 栈s 初始化; 2. 循环直到root 为空且栈s 为空 2.1 当root 非空时循环 2.1.1将root 连同标志flag=1入栈; 2.1.2 继续遍历root 的左子树; 2.2 当栈s 非空且栈顶元素的标志为2时,出栈并输出栈顶结点; 2.3 若栈非空,将栈顶元素的标志改为2,准备遍历栈顶结点的右子树;有以它为尾的弧;c.重复上述a、b,直到全部顶点都已输出,此时,顶点输出序列即为一个拓朴有序序列;或者直到图中没有无前趋的顶点为止,此情形表明有向图中存在环。

相关文档
最新文档