數據結構與算法(C#實現)系列---演示篇(一)
2024-07-21 02:23:51
供稿:網友
數據結構與算法(c#實現)系列---演示篇(一)
heavenkiller(原創)
這一篇主要是針對以后各篇的數據類型進行一個實質性的演示。因此希望大家具體看了各種數據結構的分析之后再看這篇。
主要包括如下幾個方面的演示:
1. 堆棧。 演示了一個利用堆棧作的rpn計算器
2. 排序表。演示了一個利用排序表做的多項式表達式的加法運算
3. 廣義樹。演示了深度遍歷和廣度遍歷
4. n叉樹。演示了n叉樹的生成插入刪除等基本操作
5. 表達式樹。演示了一個用二叉樹和堆棧做的可以將一個后綴表達式翻譯為日常中熟悉的中綴表達式的例子
6. avl樹。演示了基本操作
using system;
using system.collections;
namespace datastructure
{
/// <summary>
/// class1 的摘要說明。
/// </summary>
class show
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[stathread]
static void main(string[] args)
{
//
// todo: 在此處添加代碼以啟動應用程序
//
while(true)
{
console.writeline("please choose a the no. of a item you want to perform:");
console.writeline("1.stack----- rpncalculator");
console.writeline("2.sortedlist-----the addition of polynomial realized by sortedlist ");
console.writeline("3.generaltree----depthtravesal and breathtraval");
console.writeline("4.narytree");
console.writeline("5.expressiontree");
console.writeline("6.avltree");
console.writeline("7.binaryheap");
console.writeline("exit--exit this programme");
//test();
switch(console.readline())
{
case "1"://show stack
showstack_rpncalculator();
break;
case "2"://sortedlist
showsortedlist_polynomial();
break;
case "3":
showgeneraltree_travel();
break;
case "4":
shownarytree();//演示一個三叉樹的attach和detach
break;
case "5":
showexpressiontree();
break;
case "6":
showavltree();
break;
case "7":
showbinaryheap();
break;
case "exit":
return;
default:
break;
}
}
}
public static void showbinaryheap()
{
//構造一個二叉堆, 包含2,4,6,8,10,12
binaryheap bheap=new binaryheap(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());
}
}
public static void showavltree()
{
avltree testavl=new avltree(5);
testavl.insert(1);
testavl.insert(3);
testavl.insert(7);
testavl.insert(8);
testavl.insert(9);
testavl.insert(10);
testavl.insert(11);
printvisitor vis=new printvisitor();
tree.inorder invis=new datastructure.tree.inorder(vis);
testavl.depthfirsttraversal(invis);
}
public static void showexpressiontree()
{
expressiontree.postfixtoinfix();
}
public static void shownarytree()
{
//構造一個三叉樹,具體見圖1-2
narytree a=new narytree(3,"a");
narytree b=new narytree(3,"b");
narytree c=new narytree(3,"c");
narytree d=new narytree(3,"d");
narytree e=new narytree(3,"e");
b.attachsubtree(1,d);
b.attachsubtree(2,e);
a.attachsubtree(1,b);
a.attachsubtree(3,c);
//---------------------------
console.writeline("廣度遍歷");
printvisitor vis=new printvisitor();
a.breadthfirsttraversal(vis);//廣度遍歷
console.writeline("前序遍歷");
tree.preorder previsit=new datastructure.tree.preorder(vis);
a.depthfirsttraversal(previsit);
console.writeline("后序遍歷");
tree.postorder postvisit=new datastructure.tree.postorder(vis);
a.depthfirsttraversal(postvisit);
console.writeline("中序遍歷");
tree.inorder invisit=new datastructure.tree.inorder(vis);
a.depthfirsttraversal(invisit);
}