仓酷云

标题: ASP.NET教程之数据布局与算法(C#完成)系列---树 [打印本页]

作者: 逍遥一派    时间: 2015-1-16 22:34
标题: ASP.NET教程之数据布局与算法(C#完成)系列---树
它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”C++:C++/CLI语言,这个可以解决在.NETFramework中,托管C++产生的问题。在《程序员》杂志上,lippman和李建中合作连载介绍了C++/CLI语言。数据|数据布局|算法  起首我们给树下一个界说:树是一个无限的、非空的结点集,T={r}orT1orT2or…orTn

  它具有以下性子:

  1.汇合指定的结点r叫做树的根结点

  2.其他的结点能够分别成n个子集,T1,T2,…Tn(n>=0),个中每个子集都是一棵树。

  树的别的界说如度,叶子,初等就请人人查阅其余材料吧,各处都有的。

  树的次要性子一个就是遍历,分为深度遍历和广度遍历

  在这里分离完成为DepthFirstTravesal()和WidthFirstTravesal()

  个中深度遍历又分为前序遍历、中序遍历、和后序遍历,这是是接纳适配器手艺完成的。

usingSystem;

usingSystem.Collections;



namespaceDataStructure

{

///<summary>

///Tree的择要申明。

///whentraverse,traversaltypecantbechanged,orthrowaexception

///撑持列举、对照、深度复制

///</summary>

publicabstractclassTree:IEnumerable,IComparable

{

publicTree()

{

//

//TODO:在此处增加机关函数逻辑

//

}

protectedQueuekeyqueue=newQueue();//仅仅用于列举时寄存数据,不介入Equals完成中的对照

protectedTraversalTypetraversaltype=TraversalType.Breadth;//chooseatraversaltype,andDepthFirstisdefault

//protecteduintdegree=0;//degreeofthetree,inititas0

//protecteduintheight=0;//heightofthetree,inititas0



//列举分歧的遍历范例

publicenumTraversalType

{

Breadth=1,//广度遍历

PreDepth=2,//前序遍历

InDepth=3,//中序遍历

PostDepth=4//后序遍历



};

//publicvirtualabstractobjectKey{}



publicabstractTreethis[uint_index]{get;set;}//ifIonlyuseget,canIchangeitlater?



publicabstractobjectKey{get;}

publicabstractuintDegree{get;}

//publicabstractuintHeight{get;}

publicvoidSetTraversalType(TraversalType_type){traversaltype=_type;}//setatraversalatype,ifitsnotsetmanually,DepthFirstwillbechosenindefault



publicabstractboolIsEmpty();//propertytakestheplaceofIsEmpty()

publicabstractboolIsLeaf();



//OnlyVisit,needntqueue

publicvirtualvoidDepthFirstTraversal(IPrePostVisitor_vis)//middledepthfirsttraversal

{

//经由过程_vis利用分歧的会见者来举行前序、后序、中序遍历

if(!IsEmpty())

{

_vis.PreVisit(this.Key);



if(this.Degree>=1)

{

if(this.Degree>=2)

{

for(uinti=0;i<(this.Degree-1);i++)//

{

this[i].DepthFirstTraversal(_vis);//recursivecall

//_vis.Visit(this.Key);

}

}

this[this.Degree-1].DepthFirstTraversal(_vis);

}



_vis.PostVisit(this.Key);

}


}


publicvirtualvoidBreadthFirstTraversal(IVisitor_vis)//breadthfirsttraversal

{

QueuetmpQueue=newQueue();//usedtohelpBreadthFirstTraversal

//this.keyqueue=newQueue();//storekeys



if(!this.IsEmpty())

tmpQueue.Enqueue(this);//enqueuetherootnodeatfirst

while(tmpQueue.Count!=0)//untilthenumberofthequeueiszero

{

TreeheadTree=(Tree)tmpQueue.Dequeue();

//this.keyqueue.Enqueue(headTree.Key);

_vis.Visit(headTree.Key);



for(uinti=0;i<headTree.Degree;i++)

{

TreechildTree=headTree[i];

if(!childTree.IsEmpty())

tmpQueue.Enqueue(childTree);

}

}



}
publicclassInOrder:IPrePostVisitor

{

privateIVisitorvisitor;

publicInOrder(IVisitor_vis){visitor=_vis;}

#regionIPrePostVisitor成员



publicvoidPreVisit(object_obj)

{

//TODO:增加InOrder.PreVisit完成

}



publicvoidVisit(object_obj)

{

//TODO:增加InOrder.Visit完成

this.visitor.Visit(_obj);

}



publicvoidPostVisit(object_obj)

{

//TODO:增加InOrder.PostVisitor完成

}



#endregion



}

publicclassPostOrder:IPrePostVisitor

{

privateIVisitorvisitor;

publicPostOrder(IVisitor_vis){visitor=_vis;}

#regionIPrePostVisitor成员



publicvoidPreVisit(object_obj)

{

//TODO:增加PostOrder.PreVisit完成

}



publicvoidVisit(object_obj)

{

//TODO:增加PostOrder.Visit完成

}



publicvoidPostVisit(object_obj)

{

//TODO:增加PostOrder.PostVisitor完成

this.visitor.Visit(_obj);

}



#endregion



}

protectedclassEnumVisitor:IVisitor

{

QueuethisQueue;

publicEnumVisitor(Queue_que)

{

this.thisQueue=_que;

}

#regionIVisitor成员



publicvoidVisit(object_obj)

{

//TODO:增加EnumVisitor.Visit完成

this.thisQueue.Enqueue(_obj);

}



#endregion

}

#regionIEnumerable成员



publicIEnumeratorGetEnumerator()

{

//TODO:增加Tree.GetEnumerator完成

EnumVisitorvis=newEnumVisitor(this.keyqueue);

switch(this.traversaltype)

{

caseTraversalType.Breadth:

BreadthFirstTraversal(vis);

break;

caseTraversalType.PreDepth:

PreOrderpreVis=newPreOrder(vis);

DepthFirstTraversal(preVis);

break;

caseTraversalType.InDepth:

InOrderinVis=newInOrder(vis);

DepthFirstTraversal(inVis);

break;

caseTraversalType.PostDepth:

PostOrderpostVis=newPostOrder(vis);

DepthFirstTraversal(postVis);

break;



default:

Console.WriteLine("WARNING:pleasesetatraveltypefirst!--voidSetTraversalType(TraversalType_type)");

//thrownewException("WARNING:pleasesetatraveltypefirst!");//ifnotsetatype,aexceptionwillhappen

break;

}

returnthis.keyqueue.GetEnumerator();

}

#endregion
//overwriteObject.Equals()---referencetyperealization

publicoverrideboolEquals(object_obj)

{

if(_obj==null)

returnfalse;//由于this不成能为null

if(!(this.GetType()==_obj.GetType()))

returnfalse;//范例不相称也不相称

TreetmpObj=(Tree)_obj;

//对照援用成员

if(!Object.Equals(this.Key,tmpObj.Key))

returnfalse;



//对照值范例成员

if(!this.Degree.Equals(tmpObj.Degree))

returnfalse;

//if(!this.Height.Equals(tmpObj.Height))

//returnfalse;



returntrue;

}

//在此重载==,!=后,在今后承继的类中不用完成了

publicstaticbooloperator==(Tree_treeA,Tree_treeB)

{

returnObject.Equals(_treeA,_treeB);

}

publicstaticbooloperator!=(Tree_treeA,Tree_treeB)

{

return!(_treeA==_treeB);

}


#regionIComparable成员



publicvirtualintCompareTo(objectobj)

{

//TODO:增加Tree.CompareTo完成

return0;

}



#endregion



}

}
我见过java运行在手机上,包括很廉价的山寨手机,但是却暂时没发现.net在手机上有什么作为。wp7可能是个转机,但是按照《Java的跨平台就是一句谎言。那.net的跨平台也当之无愧是一句谎言。
作者: admin    时间: 2015-1-19 17:05
在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?
作者: 海妖    时间: 2015-1-25 22:19
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
作者: 透明    时间: 2015-2-4 08:41
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
作者: 乐观    时间: 2015-2-9 20:19
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
作者: 不帅    时间: 2015-2-27 20:57
碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。
作者: 蒙在股里    时间: 2015-3-9 13:53
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
作者: 变相怪杰    时间: 2015-3-16 22:44
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
作者: 飘灵儿    时间: 2015-3-23 06:14
ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2