数据结构实验报告三
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define true 1
#define false 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define OPSETSIZE 7
#define MAXQSIZE 100
#define NULL 0
typedef char TelemType;
typedef int Status;
typedef struct BiTNode
{
TelemType data;
struct BiTNode *lchild, *rchild;
2、分析如果将数转换为二进制, conversion函数的修改;
3、分析如果没有初始化栈的操作时程序的运行结果;
3、写出自己的心得体会。
//先序遍历根结点指针为T的二叉树
if (T) {
if (visit(T->data))
if (PreorderTraverse(T->lchild,visit))
if (PreorderTraverse(T->rchild,visit)) return OK;
return ERROR;
}else return OK; //if (T)
}//PreorderTraverse
Status InorderTraverse1(BiTree T, Status(*visit)(TElemType e)) {
//先序遍历根结点指针为T的二叉树
if (T) {
if (InorderTraverse1(T->lchild,visit))
if (visit(T->data))
if (p) { Push(S,p); p=p->lchild; } //根指针进栈,遍历左子树
else { //根指针退栈,访问根结点,遍历右子树
Pop(S,p); if (!visit(p->data) ) return ERROR;
p=p->rchild;
} //else
} // while
return OK;
实验条件:
具有C语言集成开发环境的计算机
实验设计方案:
设计的算法有:
1、递归建立二叉树;
2、先序递归遍历二叉树;
3、中序递归遍历二叉树;
4、后序递归遍历二叉树。
5、中序非递归遍历二叉树
实验预习成绩(涂改无效)
合格□
不合格□
【四、实验过程、数据和实验结果记录】
实验方法、步骤、操作过程的记录描述或程序代码。 实验过程中输入/输出数据、程序运行结果的记录。(可加附页)
Status InorderTraverse(BiTree T, Status *visit(TelemType e));
Status PostorderTraverse(BiTree T, Status *visit(TelemType e));
int main()
{
BiTree T;
printf("Please input characters to create a tree:\n");
} BiTNode, *BiTree;
Status CreateBiTree(BiTree *T);
Status PrintElement(TelemType e);
Status visit(TelemType e);
Status PreorderTraverse(BiTree T, Status *visit(TelemType e));
InorderTraverse(T, visit);
printf("\nPostorderTraverse:");
PostorderTraverse(T, visit);
return 0;
}
程序的一个运行实例如下。
记录成绩(涂改无效)
合格□
不合格□
【五、实验结果分析】
1、分析数制转换时后进先出的特点;
软件开发
【实验班组】
15级11班组台
【同组学生】
【实验室名】
综合实验楼
【实验日期】
2016.
【报告日期】
2016.
【二、实验教师对报告的最终评价及处理意见】
实验成绩:(涂改无效)
指导教师签名:张振领2016年 月 日
注:要将实验项目、实验课程的成绩评定及课程考核办法明确告知学生,并报实验管理中心备案
if (PreorderTraverse(T->lchild, visit))
if (PreorderTraverse(T->rchild, visit)) return OK;
return ERROR;
}
return OK;
}
Status InorderTraverse(BiTree T, Status *visit(TelemType e) )
【三、实验预习】
实验目的和要求:
1、熟练掌握二叉树的结构,以及这种数据结构的特点;
会定义二叉树的链式存储结构;
3、能实现二叉树的建立、遍历等功能,需要完成先序遍历、中序遍历和后序遍历递归算法以及中序非递归算法。
实验内容和原理或涉及的知识点:
自己编写程序实现二叉树的各种基本操作,如二叉树的建立,遍历等。
CreateBiTree(T->rchild); //建立右子树
}
return OK;
} //CreateBiTree
status PrintElement(TelemType e)
{
printf("%c",e); //输出元素值
return OK;
}
status PreorderTraverse(BiTree T, status(*visit)(TelemType e)) {
if (InorderTraverse1(T->rchild,visit)) return OK;
return ERROR;
}else return OK; //if (T)
}//InorderTraverse
status PostorderTraverse(BiTree T, status(*visit)(TelemType e)) {
CreateBiTree(&T);
printf("PreorderTraverse:");
PreorderTraverse(T, visit);
printf("\nInorderTraverse:");
InorderTraverse(T, visit);
printf("\nPostorderTraverse:");
1、根据实验预习阶段的实验设计方案,编写伪C代码如下。
typedef struct BiTNode {
TelemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
status CreateBiTree(BiTree &T){
//按先序次序输入二叉树中结点的值,空格表示空树
//后序遍历根结点指针为T的二叉树
if (T) {
if (PostorderTraverse(T->lchild,visit))
if (PostorderTraverse(T->rchild,visit))
if (visit(T->data)) return OK;
return ERROR;
}else return OK; //if (T)
{
if (T)
{
if (InorderTraverse(T->lchild, visit))
if (visit(T->data))
if (InorderTraverse(T->rchild, visit)) return OK;
return ERROR;
}
return OK;
}
Status PostorderTraverse(BiTree T, Status *visit(TelemType e))
int main()
{
BiTree T;
printf("Please input characters to create a tree:\n");
CreateBiTree(&T);
printf("PreorderTraverse:");
PreorderTraverse(T, visit);
printf("\nInorderTraverse:");
exit(OVERFLOW);
(*T)->data = ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
return OK;
}
Status PrintElement(TelemType e)
{
printf("%c", e);
}//PostorderTraverse
Status InorderTraverse2(BiTree T, Status (*visit)(TElemType e)) {
SqStack S;