数据结构与算法(C#实现)系列---演示篇(二)(转)

本文通过C#实现展示了不同类型的树遍历方法,包括广度优先、前序、中序及后序遍历,并提供了一个逆波兰表达式计算器的例子,使用栈来计算表达式的值。
数据结构与算法(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());

}

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8781179/viewspace-924562/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8781179/viewspace-924562/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值