删除子树实验报告总结

一 实验目的和要求

理解二叉树的基本概念,熟练使用多种表示法构造二叉树,掌握采用二叉链表存储结构实现二叉树的构造、遍历、插入、删除等操作算法;理解线索二叉树的作用,掌握获得线索二叉树节点在指定遍历次序下的前驱或后继结点的方法;理解哈弗曼编码和哈弗曼树的作用,掌握由指定文本求得哈弗曼编码的方法。

理解树的基本概念,熟悉树的多种存储结构,掌握采用孩子兄弟链表存储结构实现树的遍历、插入、删除等操作算法。

通过研究树和二叉树,深刻理解链式存储结构用于表达非线性结构的作用,掌握采用递归算法实现递归数据结构基本操作的设计方法。

二 题目及题意分析

题目:删除以P的第I个孩子为根的子树。

分析:用孩子兄弟链表构造一棵树,将树转化成二叉树,由根的sibling链将若干棵树连接成一棵二叉树,构造removechild(TreeNode<char *>*p,int i)函数实现操作,若p指针为空或者是i超出范围怎溢出错,否则,当删除第一个孩子为根的子树时,p的孩子指针指向原孩子指针的兄弟结点删除p的原孩子子树。若删除的为中间或最后子树,用循环语句找到要删除的子树,并使用指针temp记住该子树的前一个结点,将temp的兄弟指针指向要删除子树的兄弟结点,删除子树。

三 设计方案和功能说明

源程序如下:

Treenode.h

template<class T>

class TreeNode 结点类

{

public:

T data;

TreeNode<T>*child,* sibling;

TreeNode(T data)

{

this->data=data;

this->child=this->sibling=NULL;

}

};

Tree.h

#include<iostream.h>

#include"TreeNode.h"

template<class T>

class Tree

{

public:

TreeNode<T>*root;

Tree();

TreeNode<T>*insertchild(TreeNode<T>*p,T value);

friend ostream&operator<<(ostream&out,Tree<T>&tree); 输出流 void removechild(TreeNode<T>*p,int i); 删除子树函数

private:

void preOrder(TreeNode<T>*p,int i);

void destroy(TreeNode<T>*p); 释放

};

template<class T>

Tree<T>::Tree()

{

root=NULL;

}

template<class T>

TreeNode<T>*Tree<T>::insertchild(TreeNode<T>*p,T value)

{

TreeNode<T>*q=NULL;

if(p!=NULL)

{

q=new TreeNode<T> (value);

if(p->child==NULL)

p->child=q;

else

{

p=p->child;

while(p->sibling!=NULL)

p=p->sibling;

p->sibling=q;

}

}

return q;

}

template<class T>

ostream&operator<<(ostream&out,Tree<T>&tree)

{

tree.preOrder(tree.root,0);

return out;

}

template<class T>

void Tree<T>::preOrder(TreeNode<T>*p,int i) 输出

{

if(p!=NULL) 插入结点

{

for(int j=0;j<i;j++)

cout<<"\t";

cout<<p->data<<endl;

preOrder(p->child,i+1);

preOrder(p->sibling,i);

}

}

template<class T>

void Tree<T>::destroy(TreeNode<T>*p)

{

if(p!=NULL)

{

destroy(p->child);

destroy(p->sibling);

delete p;

}

}

template<class T>

void Tree<T>::removechild(TreeNode<T>*p,int i)

{

if(p==NULL||i==0)

cout<<"参数错误"<<endl; 溢出错

else

{ TreeNode<T>*temp=p; 头子树删除

if(i==1)

{

temp=p->child;

p->child=p->child->sibling;

destroy(temp->child);

delete temp;

}

else

{

p=p->child;

for(int j=1;j<i;j++)

{

temp=p; 记住前一个结点

p=p->sibling;

}

destroy(p->child);

temp->sibling=temp->sibling->sibling; 删除子树 链接

delete p;

}

}

}

主函数

#include"Tree.h"

int main()

{

Tree<char*> tree;

TreeNode<char*> *q=NULL;

tree.root=new TreeNode<char*>("中国");

tree.insertchild(tree.root,"北京");

tree.insertchild(tree.root,"上海");

TreeNode<char*> *js=tree.insertchild(tree.root,"江苏省");

tree.insertchild(js,"南京市");

tree.insertchild(js,"苏州市");

TreeNode<char*>*zj=tree.insertchild(tree.root,"浙江省");

tree.insertchild(zj,"杭州市");

tree.insertchild(zj,"宁波市");

TreeNode<char*> *hn=tree.insertchild(tree.root,"河南省");

tree.insertchild(hn,"郑州市");

tree.insertchild(hn,"新乡市");

cout<<tree;

tree.removechild(tree.root,2); 调用

cout<<tree;

return 0;

}

四 运行结果及分析

1删除第一个子树

中国

北京

上海

江苏省

南京市

苏州市

浙江省

杭州市

宁波市

河南省

郑州市 构造一棵树

新乡市

中国

上海

江苏省

南京市

苏州市

浙江省

杭州市

宁波市

河南省

郑州市

新乡市

Press any key to continue

2 删除中间子树

中国

北京

上海

江苏省

南京市

苏州市

浙江省

杭州市

宁波市

河南省

郑州市

新乡市

中国

北京

上海

江苏省

南京市

苏州市

河南省

郑州市

新乡市

Press any key to continue

3 p为空时

中国

北京

上海

江苏省

南京市

苏州市

浙江省

杭州市

宁波市

河南省

郑州市

新乡市

参数错误

Press any key to continue

结果分析:构造一棵树,调用函数removechild,给定不同的指针及i值运行结果正确,删除成功,考虑p为空及i超出范围,溢出错。

五 实验总结

通过实验理解了树及二叉树的存储结构熟悉掌握了孩子兄弟链表的存储结构实现,以及遍历、查找、删除等操作,深刻理解实现链式存储结构表达非线性的树存储结构。

 

第二篇:ERP实验报告总结

在这个学期,围绕本专业所提出的知识要求和能力要求,我参加了《ERP原理与应用》的专业实践课程学习。市场营销专业作为应用性很强的一门学科、一项重要的经济管理工作,是加强经济管理,提高经济效益的重要手段,经济管理离不开营销,经济越发展营销工作就显得越重要。纸上谈兵,倘若将这些理论性极强的东西搬上实际上应用,那我想我肯定会是无从下手,一窍不通。坚信“实践是检验真理的唯一标准”,只有把从书本上学到的理论知识应用于实际的会计实务操作中去,才能真正掌握这门知识。

学习是ERP业务处理的基本工作原理和基本知识和操作方法,通过每个章节的学习,老师的联机演示和每章节后面的上机操作指南,让我们更快更好的学习到浙科软件的使用方法。通过对营销管理、采购管理、存货管理、供应链管理、车间管理、资产管理、成本核算、应收应付管理、财务总帐以及人力资源管理这十大功能模块的实验操作,让我体验了ERP系统流程,深入了解了ERP系统环境下的企业业务流程,理解了ERP的业务流程思想和ERP系统的集成思想和方法,也让我对所学的知识有了进一步的了解。

这个学期的实验课是在我们充实、奋斗的过程中完成的,记得开始是那样的忙碌和疲惫,甚至是不知所措,因为我们的自学能力和结合能力没有很快的结合与适应,只能依靠老师的引导和帮助,现在的我们可以称得上是一个企业人员了。学校实验的目的就是要加强我们能力培养和职业道德意识的提高,实验就是我们适应社会工作的垫脚石。

经过这几周的上机学习,我总结出了以下要点及注意事项:

第一、 编制错误时,首先要看是不是已审核记账的凭证,然后决定要修改原始凭证还是另作张红字冲销凭证。

第二、 修改凭证时注意查看是否要取消审核记账,注意调换审核和记账的人员。

第三、 小心谨慎为善。录入数字时要反复确认是否正确,以免后续工作麻烦。

第四、 做帐套时要循序渐进,因为大部分的内容都是一环扣一环的,前面的没做完切忌做后面的内容。

在实验的过程中,我深深感觉到自身所学知识的有限。有些题目书本上没有提及,所以我就没有去研究过,做的时候突然间觉得自己真的有点无知,虽所现在去看依然可以解决问题,但还是浪费了许多时间,这一点是我必须在以后的学习中加以改进的地方,同时也要督促自己在学习的过程中不断的完善自我。另外一点,也是在每次实验中必不可少的部分,就是同学之间的互相帮助。所谓”当局者迷,旁观者清”。些东西感觉自己做的是时候明明没什么错误,偏偏对账的时候就是有错误,让其同学帮忙看了一下,发现其实是个很小的错误。所以说,相互帮助是很重要的一点。这在以后的工作或生活中也很关键的。俗话说:“要想为事业多添一把火,自己就得多添一捆材”。此次实验,我深深体会到了积累知识的重要性。在这当中我们遇到了不少难题,但是经过我们大家的讨论和老师细心的一一指导,问题得到了解决。

这次实验学习中,我可谓受益非浅。

相关推荐