ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:59.60KB ,
资源ID:13303080      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13303080.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验43文档格式.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验43文档格式.docx

1、 / B C / / D E F G 六、 分析与探讨1.用按先序遍历输入的方法输入的字符画出二叉树,看图依次按先序、中序、后序的方法写出遍历后的序列与测试结果对比可知正确。2.我在本实验中都是按递归的方法实现遍历,用栈操作也实现了非递归的遍历。七、 附录:源代码 #include#include/ 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2 /因为在math.h中已定义OVERFLOW的值为3,故去掉此行#define STAC

2、K_INIT_SIZE 100 /存储空间初始分配量#define STACKINCREMENT 10 / 存储空间分配增量typedef int Status; / Status是函数的类型,其值是函数结果状态代码,如OK等typedef int Boolean; / Boolean是布尔类型,其值是TRUE或FALSE/二叉树结点typedef struct BiTNode /数据 char data; /左右孩子指针 struct BiTNode *lchild,*rchild;BiTNode,*BiTree;typedef struct SqStack BiTree *base; /

3、在栈构造之前和销毁之后,base的值为NULL BiTree *top; / 栈顶指针 */ int stacksize; / 当前已分配的存储空间,以元素为单位SqStack; / 顺序栈/按先序序列创建二叉树int CreateBiTree(BiTree &T) /按先序次序输入二叉树中结点的值(一个字符),#表示空树 scanf(%c,&data); if(data = #) T = NULL; else T = (BiTree)malloc(sizeof(BiTNode); /生成根结点 T-data = data; /构造左子树 CreateBiTree(T-lchild); /构造

4、右子树rchild); return 0;/输出void Visit(BiTree T) if(T-data != printf(%c ,T-/先序遍历void PreOrder(BiTree T) if(T != NULL) /访问根节点 Visit(T); /访问左子结点 PreOrder(T- /访问右子结点/中序遍历 void InOrder(BiTree T) = NULL) /访问左子结点 InOrder(T- /访问根节点 Visit(T); /访问右子结点 /后序遍历void PostOrder(BiTree T) PostOrder(T-/栈的基本操作Status InitS

5、tack(SqStack &S) / 构造一个空栈S S.base=(BiTree *)malloc(STACK_INIT_SIZE*sizeof(BiTree); if(!S.base) exit(-2); /* 存储分配失败 */ S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK;Status StackEmpty(SqStack S) /* 若栈S为空栈,则返回TRUE,否则返回FALSE */ if(S.top=S.base) return TRUE; else return FALSE;Status GetTop(SqStack

6、 S,BiTree &e) /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */ if(S.top e=*(S.top-1); return OK; return ERROR;Status Push(SqStack &S,BiTree e) /* 插入元素e为新的栈顶元素 */ if(S.top-S.base=S.stacksize) /* 栈满,追加存储空间 */ S.base=(BiTree *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(BiTree); if(! exit(-2); S.top=S.bas

7、e+S.stacksize; S.stacksize+=STACKINCREMENT; *S.top+=e;Status Pop(SqStack &S,BiTree & /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK; e=*-S.top;/* 先序遍历(非递归) 思路:访问T-data后,将T入栈,遍历左子树;遍历完左子树返回时,栈顶元素应为T,出栈,再先序遍历T的右子树。*/void PreOrder2(BiTree T) /p是遍历指针 BiTree p = T; SqStack S; InitStack(S); /栈不空或者p不空时循环 while(p | !StackE

8、mpty(S) if(p ! /存入栈中 Push(S,p); /访问根节点 printf(,p- /遍历左子树 p = p-lchild; else /退栈 Pop(S,p); /访问右子树rchild; /while/* 中序遍历(非递归)T是要遍历树的根指针,中序遍历要求在遍历完左子树后,访问根,再遍历右子树。 先将T入栈,遍历左子树;遍历完左子树返回时,栈顶元素应为T,出栈,访问T-data,再中序遍历T的右子树。void InOrder2(BiTree T) /退栈,访问根节点/*/后序遍历(非递归)typedef struct BiTNodePost BiTree biTree;

9、char tag;BiTNodePost,*BiTreePost;void PostOrder2(BiTree T) stack stack; BiTreePost BT; while(p != NULL | !stack.empty() /遍历左子树 while(p ! BT = (BiTreePost)malloc(sizeof(BiTNodePost); BT-biTree = p; /访问过左子树tag = L; stack.push(BT); /左右子树访问完毕访问根节点 while(!stack.empty() & (stack.top()-tag = R BT = stack.top(); stack.pop();,BT-biTree- /遍历右子树 /访问过右子树 p = BT-biTree;/层次遍历void LevelOrder(BiTree T) /队列 queue queue; /根节点入队 queue.push(p); /队列不空循环 while(!queue.empty() /对头元素出队 p = queue.front(); /访问p指向的结点 /退出队列 queue.pop(); /左子树不空,将左子树入队 if(p-lchild ! queue.push(p-lc

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1