您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 数据结构与算法(C#实现)
数据结构与算法(C#实现)系列-----前言Heavenkiller(原创)搞计算机的人都应该很清楚,语言只是一种工具,算法才是灵魂。现在的开发语言有很多,如C++,VB,Perl,java,c#,还有如脚本语言js,vbs等,在如此多的选择面前,很多人不知道该选择哪一种好。其实不管哪一种语言,既然他存在,就一定有他的价值,有它的特定用途,而这往往是其它语言所无法比拟的。譬如C++就适合于系统底层的编程,而java一般就用于对稳定性,兼容性要求较高的场合,正所谓各有所长。像我一般用C++编写网络基层和与操作系统相关的程序,用C#写ASP.NET等程序,必要的时候再辅以Rose,RationalXDE等建模工具。但无论选择哪一种语言,算法才是根本,掌握了算法,就掌握了所有语言的根本,以不变应万变。微软的C#是一种全新的语言,利用它能快捷、高效地布署程序。现在关于C#的资料也已经有很多了,各个方面的资料都能找得到,但用C#做数据结构的似乎还没有什么,在CSDN上我只找到了三四篇,而且仅仅是讲了一下链表之类简单的数据结构。于是我利用空闲的时间用C#写了一些数据结构与算法的实现,希望对大家学习数据结构能够有所帮助。另外,由于时间仓促,难免出现一些纰漏,希望大家不吝赐教给予指正,我的email是heavenkiller2002@yahoo.com.cn.欢迎大家和我一起交流学习。本系列包括树,N叉树,广义树,二叉树,BST二叉查找树,AVL平衡树,堆,二叉堆,以及图。还有一些如哈希表,散列,左翼树,二项树,Haffman编码树等因时间关系,暂时未能奉上,以后有时间再补上吧。首先给大家展示一幅用RationalXDEfor.NET生成的类模型图,让大家对所有的类有一个大概的了解。数据结构与算法(C#实现)系列---演示篇(一)Heavenkiller(原创)这一篇主要是针对以后各篇的数据类型进行一个实质性的演示。因此希望大家具体看了各种数据结构的分析之后再看这篇。主要包括如下几个方面的演示:1.堆栈。演示了一个利用堆栈作的RPN计算器2.排序表。演示了一个利用排序表做的多项式表达式的加法运算3.广义树。演示了深度遍历和广度遍历4.N叉树。演示了N叉树的生成插入删除等基本操作5.表达式树。演示了一个用二叉树和堆栈做的可以将一个后缀表达式翻译为日常中熟悉的中缀表达式的例子6.AVL树。演示了基本操作usingSystem;usingSystem.Collections;namespaceDataStructure{///summary///Class1的摘要说明。////summaryclassShow{///summary///应用程序的主入口点。////summary[STAThread]staticvoidMain(string[]args){////TODO:在此处添加代码以启动应用程序//while(true){Console.WriteLine(pleasechooseatheNo.ofaitemyouwanttoperform:);Console.WriteLine(1.Stack-----RPNCalCulator);Console.WriteLine(2.SortedList-----theadditionofpolynomialrealizedbysortedlist);Console.WriteLine(3.GeneralTree----depthtravesalandbreathtraval);Console.WriteLine(4.NaryTree);Console.WriteLine(5.ExpressionTree);Console.WriteLine(6.AVLTree);Console.WriteLine(7.BinaryHeap);Console.WriteLine(exit--Exitthisprogramme);//Test();switch(Console.ReadLine()){case1://ShowStackShowStack_RPNCalCulator();break;case2://SortedListShowSortedList_Polynomial();break;case3:ShowGeneralTree_travel();break;case4:ShowNaryTree();//演示一个三叉树的Attach和Detachbreak;case5:ShowExpressionTree();break;case6:ShowAVLTree();break;case7:ShowBinaryHeap();break;caseexit:return;default:break;}}}publicstaticvoidShowBinaryHeap(){//构造一个二叉堆,包含2,4,6,8,10,12BinaryHeapbHeap=newBinaryHeap(10);bHeap.Enqueue(12);bHeap.Enqueue(10);bHeap.Enqueue(8);bHeap.Enqueue(6);bHeap.Enqueue(4);bHeap.Enqueue(2);//测试Dequeue();while(bHeap.Count!=0){Console.WriteLine(bHeap.DequeueMin().ToString());}}publicstaticvoidShowAVLTree(){AVLTreetestAVL=newAVLTree(5);testAVL.Insert(1);testAVL.Insert(3);testAVL.Insert(7);testAVL.Insert(8);testAVL.Insert(9);testAVL.Insert(10);testAVL.Insert(11);PrintVisitorvis=newPrintVisitor();Tree.InOrderinVis=newDataStructure.Tree.InOrder(vis);testAVL.DepthFirstTraversal(inVis);}publicstaticvoidShowExpressionTree(){ExpressionTree.PostfixToInfix();}publicstaticvoidShowNaryTree(){//构造一个三叉树,具体见图1-2NaryTreeA=newNaryTree(3,A);NaryTreeB=newNaryTree(3,B);NaryTreeC=newNaryTree(3,C);NaryTreeD=newNaryTree(3,D);NaryTreeE=newNaryTree(3,E);B.AttachSubtree(1,D);B.AttachSubtree(2,E);A.AttachSubtree(1,B);A.AttachSubtree(3,C);//---------------------------Console.WriteLine(广度遍历);PrintVisitorvis=newPrintVisitor();A.BreadthFirstTraversal(vis);//广度遍历Console.WriteLine(前序遍历);Tree.PreOrderpreVisit=newDataStructure.Tree.PreOrder(vis);A.DepthFirstTraversal(preVisit);Console.WriteLine(后序遍历);Tree.PostOrderpostVisit=newDataStructure.Tree.PostOrder(vis);A.DepthFirstTraversal(postVisit);Console.WriteLine(中序遍历);Tree.InOrderinVisit=newDataStructure.Tree.InOrder(vis);A.DepthFirstTraversal(inVisit);}数据结构与算法(C#实现)系列---演示篇(二)Heavenkiller(原创)publicstaticvoidShowGeneralTree_travel(){IEnumeratortmpIEnum;Tree.TraversalTypetravelType=0;//---------------------提示----------------------------Console.WriteLine(pleasechooseatheNo.ofaitemyouwanttotravel:);Console.WriteLine(1.BreadthFirst-----广度遍历);Console.WriteLine(2.PreDepthFirst-----前序遍历);Console.WriteLine(3.InDepthFirst----中序遍历);Console.WriteLine(4.PostDepthFirst----后序遍历);switch(Console.ReadLine()){case1://ShowStacktravelType=Tree.TraversalType.Breadth;Console.WriteLine(广度遍历);break;case2://SortedListtravelType=Tree.TraversalType.PreDepth;Console.WriteLine(前序遍历);break;case3:travelType=Tree.TraversalType.InDepth;Console.WriteLine(中序遍历);break;case4:travelType=Tree.TraversalType.PostDepth;Console.WriteLine(后序遍历);break;default:break;}//构造一棵广义树generaltreeGeneralTreeA=newGeneralTree(A);GeneralTreeB=newGeneralTree(B);GeneralTreeC=newGeneralTree(C);GeneralTreeD=newGeneralTree(D);GeneralTreeE=newGeneralTree(E);GeneralTreeF=newGeneralTree(F);A.AttackSubtree(B);A.AttackSubtree(C);B.AttackSubtree(D);B.AttackSubtree(E);A.AttackSubtree(F);//showtheoperationConsole.WriteLine(A.AttackSubtree(B));Console.WriteLine(A.AttackSubtree(C));Console.WriteLine(B.AttackSubtree(D));Console.WriteLine(B.AttackSubtree(E));Console.WriteLine(A.AttackSubtree(F));//--------------------------------------------------------A.SetTraversalType(travelType);//设置遍历类型tmpIEnum=A.GetEnumerator();//Console.WriteLine(begintodepthfisttravel:);while(tmpIEnum.MoveNext()){Console.WriteLine(tmpIEnum.Current.ToString());}}publicstaticvoidShowStack_RPNCalCulator(){//readaexpressionstringa
本文标题:数据结构与算法(C#实现)
链接地址:https://www.777doc.com/doc-5535660 .html