非递归算法课程设计

发布 2022-10-01 22:11:28 阅读 2593

课程设计(**)任务书。

题目名称学生学部(系)

专业班级姓名学号。

二叉树非递归算法实现。

一、课程设计(**)的内容。

利用非递归算法实现二叉树的先序、中序和后序遍历。

二、课程设计(**)的要求与数据。

需求分析②概要设计③详细设计④编程实现。

测试:提供数个测试用例。

符合撰写规范设计的必要说明文档。

三、课程设计(**)应完成的工作。

1)根据要求完成课题;

2)程序书写符合规范,程序设计完善;(3)对程序进行初步的测试;

4)程序运行结果和过程的界面截图;(5)根据设计规范撰写报告并按时提交;(6)设计内容用a4纸打印并按要求装订。

四、课程设计(**)进程安排。序号。

设计(**)各阶段内容。

搜集资料需求分析概要设计详细设计程序实现系统测试、运行。

提交报告。地点。

图书馆图书馆图书馆图书馆图书馆机房。起止日期。

五、应收集的资料及主要参考文献。

1]朱战立。数据结构-使用c语言(第四版).北京:电子工业出版社,2010.[2]严蔚敏,吴伟民。数据结构[m].北京:清华大学出版社,2002.

发出任务书日期:2024年12月12日指导教师签名:计划完成日期:2024年12月30日教学单位责任人签章:

目录。1序言1

1.1内容11.2目的1

2需求分析1

2.1需求分析12.2功能分析1

3概要设计2

3.1设计思想2

4详细设计25程序实现2参考文献4

1序言。1.1内容。

对二叉树的遍历过程进行了深入的分析,根据二叉树三种遍历的内在关系给出了求先序序列、中序序列和后序序列的非递归算法。1.2目的。

该算法只需对二叉树遍历一次即可求出三种遍历序列。

2需求分析。

2.1需求分析。

先序遍历算法:若二叉树为空,则空操作;否则,(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。

中序遍历算法:若二叉树为空,则空操作;否则,(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。

后序遍历算法:若二叉树为空,则空操作;否则,(1)后序遍历右子树;(2)后序遍历左子树;( 3)访问根结点。

2.2功能分析。

3概要设计。

3.1设计思想。

要想给出三种遍历算法的非递归程序,就是要设计一个非递归算法,实现从1出发沿虚线进行遍历到2结束的过程。既然这种遍历是一次就能完成的过程,就应该能够写出一个三种遍历的通用的非递归算法。分析上述过程可以发现,只需要设置一个栈,即可一次遍历得到二叉树的三种遍历序列。

4详细设计。

首先, (先序访问根结点a) ,a和1进栈( 1表示结点a的右子树还未访问) ,先序访问a的左子树的根结点b) ,b和1进栈,由于b的左子树为空,所以b和1出栈, (中序访问b) ,b和0进栈( 0表示开始遍历结点b的右子树) ,由于b的右子树为空, b和0出栈, (后序访问b) ,a和1出栈, (中序访问a) ,a和0进栈, (先序访问a的右子树的根结点c) ,c和1进栈,由于c的左子树为空, c和1出栈, (中序访问c) ,c和0进栈,由于c的右子树为空, c和0出栈, (后序访问c) ,a和0出栈, (后序访问a) ,此时栈已空,遍历过程结束。

5程序实现。

设二叉树与栈的结构如下(用c语言描述) :

typedef struct bitnodebitnode,*bitree;

typedef struct elemtypeelemtype;

typedef struct arraysqstack;

二叉树遍历的通用非递归算法描述如下:

1)初始化栈s; sum=0;

2) for(pt=t; pt; pt=pt- >lchild)

sequence [sum].data=pt- >data; /先序visit(pt- >data)sequence [sum].xh=1;sum++;

pr=1; /表示pt的右子树还未访问push(s,p); p进栈}( 3)若栈s非空,则else}}

图2总结。

数据结构”是计算机类各专业的核心课程。通过学习这门课,对于我的逻辑思维培养和程序设计思想体系的建立有着重要的影响。在调试过程中,碰到诸多问题,比如时间复杂度的长度、定义表长过小、处理记录数量错误时程序的异常,调试时的语法错误等等。

处在不断调试,询问老师,和同学**之后,终于解决,运行成功。

参考文献。1]朱战立。数据结构-使用c语言(第四版).

北京:电子工业出版社,2010.[2]严蔚敏,吴伟民。

数据结构[m].北京:清华大学出版社,2002.

[3]广树建。新编c/c++程序设计教程。广州:

华南理工出版社,2008

4]陈玉坤,计元。以问题结构为基础的递归程序设计[j].小型微型计算机系统,2001.[5]张文祥,杨兆楠。递归程序的非递化算法[j].煤炭技术,2003(22).

经过“数据结构”的学习和这次课程设计,使我对c语言的各种法有了更加深刻的了解和认识。以前长辈给我们说,学习知识才是你们以后好的生活的保证,我总是不以为然,觉得没有知识,也是可以很好的生活,也就边玩边学,可是通过这次课程设计,我认识到,没有扎实的知识做基础,很难完成很多工作。在这个科技高级发达的社会,没有知识是行不通的。

心。在这次非递归算法的课程设计当中,我们可以深刻体会到“数字结得。

构”里面严谨的逻辑运算,并对c语言有了更深程度的一个理解。这个体。

程序的主要功能就是在非递归的算法下实现先、中、后序的遍历。从中会。

加深对树的理解。

2024年12月29日。

教师评语。2024年01月05日。

2024年01月05日。

成绩及签名。

算法课程设计

目录。1 问题描述第1页。2 算法分析第2页。3 伪 第5页。4 设计流程第6页。5 演示程序设计第8页。6 测试与结论第16页。7 设计过程遇到的问题 思考及解决方法 第17页。八 总结第17页。1 问题描述。八皇后问题是一个古老而著名的问题,它是回溯算法的典型例题。该问题是十九世纪德国著名数学家...

算法课程设计

当一个问题具有最优子结构性质时,根据其具体情况可以用动态规划算法或者贪心算法来求解。但当问题同时具有贪心选择性质时,贪心算法则通常会给出一个更简单 直观和高效的解法。贪心算法则通常会给出一个更简单 直观和高效的解法。贪心算法通过一系列的选择来得到一个问题的解,并且每次贪心选择都能将问题化简为一个更小...

算法课程设计

算法课程设计 实践报告。所属学院。专业班级。学生姓名。学生学号。任课教师。2013年6 月30日。一 实践题目及内容 迷宫问题 回溯法,栈的应用 问题描述 迷宫问题是一个经典的程序设计问题,计算机解迷宫问题的基本思想是 穷举求解 的方法,即从入口出发,顺某一方向向前试探,若能走通,则继续往前走 否则...