数据结构与算法(C#实现)系列---演示篇(二) Heavenkiller(原创) public static void ShowGeneralTree_travel() { IEnumerator tmpIEnum; Tree.TraversalType travelType=0; //---------------------提示---------------------------- Console.WriteLine("please choose a the No. of a item you want to travel:"); Console.WriteLine("1.BreadthFirst----- 广度遍历"); Console.WriteLine("2.PreDepthFirst-----前序遍历"); Console.WriteLine("3.InDepthFirst----中序遍历"); Console.WriteLine("4.PostDepthFirst----后序遍历"); switch(Console.ReadLine()) { case "1"://Show Stack travelType=Tree.TraversalType.Breadth; Console.WriteLine("广度遍历"); break; case "2"://SortedList travelType=Tree.TraversalType.PreDepth; Console.WriteLine("前序遍历"); break; case "3": travelType=Tree.TraversalType.InDepth; Console.WriteLine("中序遍历"); break; case "4": travelType=Tree.TraversalType.PostDepth; Console.WriteLine("后序遍历"); break; default: break; } //构造一棵广义树 generaltree GeneralTree A=new GeneralTree("A"); GeneralTree B=new GeneralTree("B"); GeneralTree C=new GeneralTree("C"); GeneralTree D=new GeneralTree("D"); GeneralTree E=new GeneralTree("E"); GeneralTree F=new GeneralTree("F"); A.AttackSubtree(B); A.AttackSubtree(C); B.AttackSubtree(D); B.AttackSubtree(E); A.AttackSubtree(F); //show the operation Console.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("begin to depthfist travel:"); while(tmpIEnum.MoveNext()) { Console.WriteLine(tmpIEnum.Current.ToString()); } } public static void ShowStack_RPNCalCulator() { //read a expression string and push every character into the stack in queue. Console.WriteLine("this is performance for stack,you can input a string like this '123*+',then this subprogramme can compute it and get the result '7',this is RPN calculator. "); Console.WriteLine("please input a expression string:"); string strExpression=Console.ReadLine(); char [] tmpChars=strExpression.ToCharArray(0,strExpression.Length); Stack stackRPN=new Stack(); int numA,numB; foreach(char tmp in tmpChars) { switch (tmp) { case '*': numA=(int)stackRPN.Pop(); numB=(int)stackRPN.Pop(); stackRPN.Push(numA*numB); break; case '+': numA=(int)stackRPN.Pop(); numB=(int)stackRPN.Pop(); stackRPN.Push(numA+numB); break; default: stackRPN.Push(Int32.Parse(tmp.ToString())); break; } } Console.WriteLine("the result is:{0}",stackRPN.Pop().ToString()); }