数据结构与算法 (C# 实现 ) 系列 --- 演示篇 ( 三 )
Heavenkiller( 原创 )
public static void ShowSortedList_Polynomial()
{
//100+10x+x^2 + 1+10x+100x^2
SortedList tmpListA= new SortedList();
SortedList tmpListB= new SortedList();
SortedList tmpListC= new SortedList(); //used to store the result
SortedList tmpKeyList= new SortedList(); //used to store all keys of two polynomials
//init polynomial A and show it
tmpListA.Add(0,100);
tmpListA.Add(1,10);
tmpListA.Add(2,1);
ShowSortedList_ShowPolynomial("tmpListA",tmpListA.GetEnumerator());
//init polynomial B and show it
tmpListB.Add(0,1);
tmpListB.Add(1,10);
tmpListB.Add(2,100);
ShowSortedList_ShowPolynomial("tmpListB",tmpListB.GetEnumerator());
//init the key list which contains all keys of A and B but everyone once
IDictionaryEnumerator tmpIDic=tmpListA.GetEnumerator();
while (tmpIDic.MoveNext()!= false )
{
if (!tmpKeyList.ContainsKey(tmpIDic.Key))
{
tmpKeyList.Add(tmpIDic.Key, null );
}
}
tmpIDic=tmpListB.GetEnumerator();
while (tmpIDic.MoveNext()!= false )
{
if (!tmpKeyList.ContainsKey(tmpIDic.Key))
{
tmpKeyList.Add(tmpIDic.Key, null );
}
}
//Add A and B and show the result
tmpIDic=tmpKeyList.GetEnumerator();
while (tmpIDic.MoveNext()!= false )
{
object objA= null ,objB= null ,objC= null ;
objC=tmpIDic.Key;
if (tmpListA.ContainsKey(objC))
objA=tmpListA[objC];
if (tmpListA.ContainsKey(objC))
objB=tmpListB[objC];
//objC=objA+objB;
//tmpKeyList[objC]=(int)objA+(int)objC;
tmpListC.Add(objC,( int )objA+( int )objB);
}
ShowSortedList_ShowPolynomial("the addition result of A and B",tmpListC.GetEnumerator());
}
public static void ShowSortedList_ShowPolynomial( string tip,IDictionaryEnumerator iDic)
{
string strExpress= null ;
iDic.Reset();
while (iDic.MoveNext()!= false )
{
strExpress+=iDic.Value.ToString()+"*X^"+iDic.Key.ToString()+"+";
}
Console.WriteLine(tip+":"+strExpress);
}
}