2012级算法与数据结构实验指导书18
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最新版
目录实验一线性表基本操作的编程实现 (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级数据结构与算法课程设计指导书
长沙学院课程设计指导书系(部)计算机科学技术专业软件工程(服务外包)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版任务书一、任务背景数据结构与算法是计算机科学与技术专业的重要课程之一,旨在培养学生分析和解决复杂问题的能力。
本课程设计主要通过一个真实案例,让学生深入理解数据结构与算法的应用,并能够独立完成相应的设计和开发任务。
二、任务目标1. 掌握数据结构与算法的基本概念和原理。
2. 能够分析问题需求,设计合适的数据结构与算法解决方案。
3. 能够独立完成课程设计,并能进行有效的测试和调试。
三、任务要求1. 学生根据给定的案例,自行选择实现语言和开发环境。
2. 实现一个能够对输入的数据进行处理的程序,要求程序能够正确处理各种边界情况。
3. 程序设计要求使用合理的数据结构和算法,保证程序的运行效率和资源利用率。
4. 程序要求具备良好的用户界面,可以直观地显示程序的运行结果。
5. 程序应回归测试要求覆盖到各种情况,并能够快速定位和修复问题。
6. 学生需要在规定的时间内完成程序设计,并进行提交和展示。
四、任务安排1. 学生在完成任务前需要对数据结构与算法的相关知识进行系统学习。
2. 学生需在规定时间内完成项目的需求分析和整体设计。
3. 学生需按照设计要求进行程序的开发和功能测试。
4. 学生需要撰写完整的设计文档和用户手册,并进行提交。
5. 学生需按时进行项目的汇报和展示。
五、任务考核1. 根据学生提交的设计文档和用户手册进行初步评估。
2. 进行功能和性能测试,评估程序的稳定性和可靠性。
3. 根据学生的汇报和展示内容进行最终评定。
4. 综合考虑学生的完成情况和表现,给予相应的得分和评价。
六、参考要求1. 参考书目:《算法导论》、《数据结构与算法分析》等。
2. 参考案例:从现实生活中选取一个相关案例,如银行排队系统、图书管理系统等。
七、附件附件1:数据结构与算法课程设计案例(具体案例请参考附件1)八、备注任务书的内容根据2012版的数据结构与算法分析课程设计要求编写,要求学生完成相应的设计和开发任务。
《算法与数据结构》实验指导书
《算法与数据结构》吴景岚王润鸿编撰闽江学院计算机实验教学中心印制目录前言 (1)实验一顺序表基本操作的实现 (2)实验二链表基本操作的实现 (4)实验三串基本操作的实现 (7)实验四二叉树基本操作的实现 (9)实验五图基本操作的实现 (12)前言《数据结构》是计算机科学与技术、软件工程等专业的专业基础必修课,主要介绍如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法进行分析和评价。
本课程的学习应使学生深刻地理解数据结构的逻辑结构和物理结构的基本概念及有关算法,培养学生基本的、良好的程序设计技能以及针对具体问题,选择适当的数据结构,设计出有效算法的能力。
《数据结构》是一门理论和实践相结合的课程,它在整个计算机专业教学体系中处于举足轻重的地位,是计算机科学的算法理论基础和软件设计的技术基础,其上机实验的目的主要是编程实现数据结构各章的主要算法,训练学生实际动手进行程序设计和程序调试的能力,加深对数据结构相关概念和算法的理解。
实验一顺序表基本操作的实现专业:计算机科学系嵌入式应用班级: 2班学号: 3141101212 姓名:粟代琼实验地点:工A207 实验时间: 2015 10 15 指导教师:陈雄峰【实验课程名称】算法与数据结构【实验项目名称】顺序表基本操作的实现一、实验目的1掌握线性表顺序存储基本操作;2学会设计实验数据验证程序。
二、实验仪器及环境计算机,window xp操作系统,VC++6.0三、实验内容及步骤线性表顺序存储基本操作存储结构定义:#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量typedef struct{ElemType *elem; //存储空间基址int length;//当前长度int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)}SqList;实现的基本操作:InitList( &L )操作结果:构造一个空的线性表 L 。
数据结构实验指导2012
数据结构实验指导本部分为读者设置了九个实验,读者可根据需要选做。
每个实验都分为两部分内容:实验内容和实验题目,实验内容是引导读者有效地掌握相关章节的算法,而实验题目则要求读者独立完成。
本书中所有结构的数据域部分均以整型数据或字符型示例,读者可根据需要自己调整实际数据类型。
一、实验要求(1)上实验以前应该明确当次实验的目的,阅读实验内容,写好实验题目程序清单。
(2)实验环境可用Turboc2.0或者Turboc3.0,要求读者事先复习好编译环境的使用方法,在实验时把主要精力放在算法设计上,而不是放在程序调试上。
(3)实验结束要书写实验报告。
(4)充分利用上机时间,提高上机效率。
二、实验报告的内容实验报告要包括以下几部分:(5)实验目的。
(6)实验内容。
(7)实验题目清单及必要的注释。
(8)程序的运行结果。
(9)实验总结(实验结果的分析,自己的经验及不足等)。
实验一线性结构的操作实验1.1 顺序表的插入和删除的实现一、实验目的:掌握线性表的顺序存储结构的实现方法,能够实现顺序表插入和删除的程序。
二、实验内容:建立一个顺序表(有n个数据结点),输入n个数据值,并能够完成在第i个结点之前插入数据e的操作。
1进入visual c++6.0集成环境。
2书写程序清单。
注意如下问题。
插入函数的实现。
插入之后线性表如何输出,插入成功与否如何表示。
3调试程序,运行,输入数据。
注意应输入一些边界数据和一些非法数据以证明算法的健壮性。
三、实验题目:参照实验内容的方法,实现顺序表的删除。
附:实验内容的程序清单。
#include "stdio.h"typedef int status;typedef struct{int *elem;int length;int listsize;}Sqlist;status Create_sq(Sqlist *L,int n){int i;L->elem=(int *)malloc(100*sizeof(int));if(!L->elem) return 0;for(i=0;i<n;i++)scanf("%d", &(L->elem[i]));/*输入n个数据值*/L->length=n;L->listsize=100;return 1;}status Listinsert_sq(Sqlist *L,int i,int e){int *q,*p, *newbase;if(i<1||i>L->length+1) return 0;if(L->length>=L->listsize){newbase=(int *)realloc(L->elem,(L->listsize+10)*sizeof(int));if(!newbase) exit(-2);L->elem=newbase;L->listsize+=10;}q=&(L->elem[i-1]);for(p=&(L->elem[L->length-1]);p>=q;--p)*(p+1)=*p;*q=e;++L->length;return 1;}main(){Sqlist L1;int j,n,a;int i,e;printf("\n please input the number of data:\n");scanf("%d",&n);if(Create_sq(&L1,n)==1){scanf("%d%d",&i,&e);/*输入i为插入位置,e为要插入元素的数值)*/ a=Listinsert_sq(&L1,i,e);if(a==1)printf("insert success\n");elseprintf("insert false\n");printf("the list elements are:\n");for(i=1;i<=L1.length;i++){printf("%d\t",L1.elem[i-1]);}}}实验1.2 单链表插入和删除的实现一、实验目的:掌握线性表的链式存储结构的实现方法,能够实现单链表插入和删除的程序。
算法实验指导书12级
算法实验指导书12级《算法设计与分析》实验指导书本实验指导书是为配合《算法设计与分析》课程实验而编写的,其目的是使学生消化算法理论知识,加深对课堂讲授内容的理解,尤其是一些典型算法的实现及其应用,培养学生独立编程和调试程序的能力,使学生对算法的设计与分析有更深刻的认识。
一、上机实验应遵循以下步骤:(1)实验前,先准备好上机所需的程序。
手编程序应书写整齐,并经自我检查无误后才能上机。
(2)实验时,输入并调试自己所编的程序,独立上机调试,上机时出现的问题,最好能自己独立解决。
(3)实验结束后,按照规定整理出实验报告,并在规定时间内提交。
二、实验报告的内容:实验报告应该包括:实验名称、实验目的、实验题目、问题分析、程序清单、运行结果、实验结论(即算法的时间空间分析与改进建议)。
三、需写出实验报告的实验:实验一、实验四、实验五。
实验一递归与迭代算法一、实验目的与要求1、通过本实验掌握迭代算法和递归算法的基本思想及设计工作的主要步骤。
2、通过本实验加深对循环和递归过程的理解。
3、通过本实验加深对迭代过程的理解。
4、掌握两种算法策略的主要适用范围。
二、实验题目:1、求2+22+222+……+22……22(精确计算)n个22、从键盘输入任一正整数n(n>=3),打印如下图所示的n×n 方阵(下图中n=7)。
1 2 3 4 5 6 724 25 26 27 28 29 823 40 41 42 43 30 922 39 48 49 44 31 1021 38 47 46 45 32 1120 37 36 35 34 33 1219 18 17 16 15 14 133、完成给“余”猜数的游戏:心里先想好一个1~100之间的整数x,然后输入3个除数a、b、c,再输入x分别除以a、b、c后所得到的余数ra、rb、rc,计算机能求出这个数x并输出x。
4、用递归函数判断字符串str是否为“回文”。
三、实验步骤1、理解算法思想和问题要求。
数据结构实验2012
数据结构实验第一节概述一、实验目的实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,实验题中的问题比平时的练习题要复杂,也更接近实际。
实验的目的是旨在使学生进一步巩固课堂上所学的理论知识;深化理解和灵活掌握教学内容;培养学生算法设计的能力和解决实际问题的程序设计的能力。
本实验指导书仅列出一个实验项目下一个实验题存储结构、算法;供其他实验题作为参考。
二、实验名称与学时分配三、实验考核每次实验结束后,均应上交实验报告。
实验成绩占数据结构课程结业成绩的20%。
实验报告应包括如下内容:1、问题描述:简述题目要解决的问题是什么。
2、设计:包括存储结构设计、主要算法设计等。
用类C语言或用框图描述。
3、调试报告:调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。
4、算法分析与改进:算法的时间复杂度和空间复杂度分析;算法改进的设想。
5、经验和体会附源程序清单和运行结果。
源程序要加注释。
如果题目规定了测试数据,则结果要包含这些测试数据和运行输出,当然还可以含有其它测试数据和运行输出(有时需要多组数据)。
四、实验时间安排16学时。
五、选题安排实验1,5,6必做,实验2和实验3两题选作1题,实验报告上交4个实验。
其余题选作。
第二节线性表算法设计及应用一、目的与要求(一)目的了解线性表及在计算机中的两类不同的存储结构;熟练掌握线性表的查找、插入和删除等算法并灵活运用这些算法。
(二)要求用C语言编写程序,实现多项式求值或求解约瑟夫问题。
二、示例1、题目报数问题编号为1,2,···,n的n个人围坐在一圆桌旁,从第s个人开始报数,报到第m的人退席,下一个人又重新从1开始报数,依此重复,直至所有的人都退席。
例如,设s=1,m=4,n=8,则退席的人的编号依次为4,8,5,2,1,3,7,6。
2、存储结构(1)以顺序表为存储结构int p[n]; // n—常量(2)以循环链表为存储结构typedef struct lnode{int data;struct lnode *next;} lnode;3、算法设计(1)void josephus_1(int p[], int m, int n) {int i,j,t;for(i=0;i<=n-1;i++) p[i]=i+1; //p[0]..p[n-1]:n个人t=0; //第一次报数的位置 (第一人的位置)for(i=n;i>=1;i--) {t=(t+m-1)%i ; // t:定位于第m人,i:当前圆桌上的人数,%:实现环(圆桌)的处理cout<<p[t]<<" "; // 输出第m人信息(第m人报数)for (j=t+1;j<=i-1;j++)p[j-1]=p[j]; //元素前移(第m人退席,删除第m人)}}(2)void josephus_2 (lnode *r, int m, int n) {//r:(不带头结点的)单向循环链表的尾指针Lnode *p=r;//p:指向尾指针for (i=1;i<=n;++i) {for (j=1;j<=m-1;++j) p=p->next; //p后移m-1次,定位于m-1处(要退席的人之前)s=p->next; //s定位于m人(要退席的人)cout<<s->data<<" "; //第m人报数p->next=s->next; delete s ; //第m人退席,删除第m人}}4、小结线性表是软件设计中最基础的数据结构。
2012级数据结构实训指导书(2013年12月)
《数据结构课程设计》指导书说明:本指导书适用于2012级1-4班一、课程设计的目的、要求和任务本课程设计是为了配合《数据结构》课程的开设,通过设计完整的程序,使学生掌握数据结构的应用、算法的编写、类C语言的算法转换成程序并用上机调试的基本方法。
1.课程的目的(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。
(2)使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。
(3)使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力;2.课程的基本要求与任务(1)巩固和加深对数据结构基本知识的理解,提高综合运用课程知识的能力。
(2)培养学生自学参考书籍,查阅手册、图表和文献资料的能力。
(3)通过实际课程设计,初步掌握简单软件的分析方法和设计方法。
(4)了解与课程有关的工程技术规范,能正确解释和分析实验结果。
(5)题目具有足够的工作量。
二、课程设计的一般步骤:1.选题与搜集资料:每人选择一题(每题有几个同学选),进行课程设计课题的资料搜集。
2.分析与概要设计:根据搜集的资料,进行程序功能与数据结构分析,并选择合适的数据结构、并在此基础上进行实现程序功能的算法设计。
3.程序设计:运用掌握C/C++语言编写程序,分工实现各个模块功能。
4.调试与测试:调试程序,并记录测试情况。
5.完成课程设计报告。
6.验收与评分:指导教师对每个同学的开发的系统进行综合验收,并由学院考核小组进行随机抽查评分。
三、课程设计成果的规范(详见文档模板)课程设计成果应包括如下3个部分:1.一个小组一份《设计文档》,其中包括:a) 系统功能模块图(有流程图附上)b) 系统定义的数据结构;c) 系统设计的主要功能函数及功能简介d) 项目组成员的分工情况2. 每个同学一份《实训报告》,其中包括:a) 问题描述b) 基本要求c) 系统分析与设计d) 测试数据及结果e) 总结3. 附录:源程序清单四、成绩评定标准学生成绩由以下几个方面进行评定:1.学生编写的实际软件和运行结果,占总成绩50%;2.设计报告,占总成绩30%3.答辩,占总成绩10%4.出勤,占总成绩10%五、实习过程项目实训过程分为以下六个阶段,各阶段如下:1、功能分析(0.25天)2、模块划分及总体设计(0.75天)3、数据结构定义、详细设计(0.5天)4、编码(2.5天)5、测试修订(1天)6、答辩(1天)合计6天。
《数据结构与算法》实验指导书
《数据结构与算法》实验指导书郁松软件学院第一部分:《数据结构》实验大纲一、数据结构实验的地位与作用《数据结构》是计算机、信息管理和电子商务专业一门重要的专业技术基础课程,是计算机、信息管理和电子商务专业的一门关键性课程。
本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术,并做了一些性能分析和比较,内容非常丰富。
本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。
《数据结构》课程内容丰富,学习量大,给学习带来一定的困难;所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度;隐含在各部分的技术和方法丰富,也是学习的重点和难点。
根据《数据结构》课程本身的技术特性,设置《数据结构课程实验》实践环节十分重要。
通过实验实践内容的训练,突出学生程序思维训练和动手上机调试程序的能力,目的是提高学生组织数据及编写大型程序的能力二、数据结构实验的目的使学生不仅能够深化理解教学内容,进一步提高灵活运用数据结构、算法和程序设计技术的能力,而且可以在总是分析、总体结构设计、算法设计、程序设计、上机操作及程序调试等基本技能方面受到综合训练。
实验着眼于原理与应用的结合点,使学生学会如何把书本上和课堂上学到的知识用于解决实际问题,从而培养计算机软件工作所需要的动手能力。
不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。
实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。
为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。
数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。
【实验】数据结构实验指导书及答案
【关键字】实验数据结构课程实验指导书数据结构课程组编西南交通大学电气工程学院一、实验教学的目的与基本要求实验目的:用计算机来解决实际问题时,就要涉及到数据的表示及数据的处理,而数据表示及数据处理正是数据结构课程的主要研究对象,通过这两方面内容的学习,为后续课程,特别是软件方面的课程打下了厚实的知识基础,同时也提供了必要的技能训练。
因此,数据结构课程在计算机应用中具有举足轻重的作用。
通过实验实践内容的训练,突出学生程序思维训练和动手上机调试程序的能力, 使学生掌握数据结构的基本原理和编程方法,提高学生组织数据及编写程序的能力。
实验要求:1、实验前要预习:实验前必须认真预习相关的知识,做好充分准备。
2、学生进入实验室,要保持室内整洁和安静。
按照指定的内容进行实验。
3、学生在实验前做好预习,写好算法;实验完毕由教师验收合格后方可离开,并写好实验报告。
4、报告内容包括实验目的、实验内容、程序清单和实验结果等。
要求书写文字整齐简洁。
5、实验过程中要注意人身和设备安全,遇到事故或出现异常现象,应立即切断电源,保持现场并报告指导教师处理。
二、实验报告要求、实验考核方式、内容及成绩评定标准实验报告要求内容清晰完整,写出实验结果。
实验考核方式依据实验报告完成情况和实验上机情况综合考核。
根据实验报告和实验课出席情况给出实验成绩,满分10分。
三、实验教材及参考书《数据结构》严蔚敏清华大学出版社 2005实验一熟悉开发环境和抽象数据类型一.实验目的1.熟悉VC软件开发环境。
2.熟悉抽象数据类型的定义与应用。
二.实验内容1.在VC下编写程序,实现求出从键盘输入的两个数的最大值。
例如,从键盘输入a=4,b=5。
得出结果c = 52.在VC下编写程序,实现求出两个复数的和。
定义复数的数据类型,复数由实部和虚部构成。
复数的和是两个复数的实部和虚部分别求和得出。
其中的两个复数分别从键盘输入,例如,输入3, 4表示复数Z1:3+4i; 输入1, 2表示复数Z2:1+2i。
《数据结构与算法》实验指导书.
《数据结构与算法》实验指导书.《数据结构与算法》实验指导书实验1 顺序表一、实验目的(1)掌握顺序表的逻辑结构、存储结构及描述方式。
(2)掌握顺序表的定位、插入、删除等操作。
二、实验要求(1)调试程序要记录调试过程中出现的问题及解决办法;(2)给出每个问题的算法或画出流程图;(3)编写程序要规范、正确,上机调试过程和结果要有记录,并注意调试程序集成环境的掌握及应用,不断积累编程及调试经验;(4)做完实验后给出本实验的实验报告。
三、实验设备、环境奔腾以上计算机,装有Turbo C 2.0或Visual C++软件四、实验步骤及内容实验步骤:1.根据题目,编写程序。
2.上机调试通过。
3.按照金陵科技学院实验报告格式,撰写各实验报告。
实验内容:(1)编写一个函数print_all_data,该函数的作用是逐个输出顺序表中所有数据元素的值。
编写主函数,从键盘输入顺序表,调用函数print_all_data,测试结果。
(2)编写顺序表定位操作函数locata,该函数的作用是在顺序表中查找是否存在数据元素的值与变量x的值相等。
如果存在满足条件的数据元素,则返回顺序表中和x值相等的第1个数据元素在表中的下标;如果不存在,则返回-1。
编写主函数,从键盘输入顺序表,以及变量x的值,调用函数locate,测试结果。
(3)编写一个函数insert,该函数的作用是在递增有序的顺序表中插入一个新结点x,要求保持顺序表的有序性,输出插入前后顺序表状态。
编写主函数,从键盘输入顺序表以及变量x的值,调用函数insert,测试结果。
(4)编写一个函数delete,该函数的作用是删除顺序表中所有等于X的数据元素。
若顺序表中没有满足条件的数据元素,则输出合适的信息。
若有满足条件的数据元素,则输出删除前后顺序表状态。
编写主函数,从键盘输入顺序表以及变量x的值,调用函数delete,测试结果。
五、讨论、思考题1、如何在排列有序的顺序表中插入新元素,而保证顺序表的有序性?2、如何在排列有序的顺序表中删除某元素,而保证顺序表的有序性?实验2 单链表一、实验目的(1)掌握单链表的逻辑结构、存储结构及描述方式。
数据结构实验指导书(2012.9)
1.2实验报告(文档)书写规范实验报告(文档)应包括以下7个方面的内容:1、问题分析根据对实验任务的理解,以无歧义的陈述说明程序设计的任务,强调的是程序要做什么。
指出解决问题的关键步骤,如果问题复杂,应将问题分解成若干个子问题。
明确规定:(1)本实验的任务以及程序所能达到的功能;(2)完成该任务需要解决的关键问题;(3)程序设计中输入数据的类型、形式及输入值的范围;(4)设置测试数据:包括正确的输入及预计的输出结果和含有错误的输入及预计输出结果。
2.概要设计针对问题分析中提出的关键问题进行分析(可以列举实例进行分析),从而总结出关键问题的解决思路,给出解决关键问题的算法思想。
说明本程序中用到的所有程序模块、各程序模块之间的层次(调用)关系以及主程序的流程,各程序模块使用中文名称即可。
3.详细设计根据概要设计中提出的关键问题的解决思路,设计本程序中用到的所有数据结构,要求做到:(1)在所设计的数据结构下分析关键问题的具体解决方案和步骤,给出相应的用类C 语言描述的算法;(2)分析设计程序中需要用到的变量、全局变量及其数据类型定义;(3)设计程序中的所有模块(自定义函数和主函数),通过分析定义函数的类型、描述函数参数、说明函数名称,并给出相应类C语言描述的算法(类C语言算法达到的详细程度建议为:按照该算法可以直接写出高级程序设计语言程序);(4)画出函数和过程的调用关系图。
4.调试分析程序调试主要实现程序的语法错误检查和功能性错误检查。
调试最好分模块进行,自底向上,即先调试低层过程或函数。
在实验报告中应有如下内容:(1)记录调试过程中遇到的问题及其解决方案,如果由此反映出程序设计的不足,应对设计与实现进行回顾讨论和分析,并修正;(2)算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;(3)经验和体会等。
5.测试结果将程序的测试结果截图,展示出你的测试过程和结果,包括输入和输出。
《数据结构与算法分析课程设计》任务书2012版
2012级数据结构与算法分析课程设计任务书
(适应于2012级软件工程专业12201801-3,12201807-9班)
一、课程设计的目的与要求
1.教学目的
《数据结构与算法设计》课程设计是软件工程、网络工程、数字媒体技术专业学生的重要实践性环节。
通过本课程设计,学生可以了解数据结构、算法设计的基本方法与基本原理,掌握软件设计中数据的组织,算法的设计,为今后从事实际工作打下基础。
同时,作为整个实践教学体系一部分,系统培养学生采用面向对象的方法分析问题与解决问题的能力及团体组织与协作能力。
2.教学要求
从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:
1.掌握各类基本数据结构及其实现;
2.掌握不同数据结构的实际应用;
3.培养利用数据结构并对实际应用问题进行算法设计的能力。
4.编程简练,程序功能齐全,能正确运行。
5.说明书、流程图要清楚,规范
6.课题完成后必须按要求提交课程设计报告,格式规范,内容详实。
二、课程设计的内容与安排。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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,直到全部顶点都已输出,此时,顶点输出序列即为一个拓朴有序序列;或者直到图中没有无前趋的顶点为止,此情形表明有向图中存在环。