数据结构与算法(C#实现)系列---演示篇(三)(转)
public static void ShowSortedList_Polynomial() { //100+10*x+x^2 + 1+10*x+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);
数据结构与算法(C#实现)系列---AVLTree之二(转)
//---------------override-------------------- public override void AttachKey(object _obj) { if(!IsEmpty()) throw new Exception("My:this node must be a empty tree node!"); this.key=_obj; //产生一个degree长的数组,并将其初始化为空树 this.treeList=new ArrayList(); this.treeList.Capacity=(int)this.degree; for(int i=0;i<this.degree;i++) {
数据结构与算法(C#实现)系列---演示篇(一)(转)
这一篇主要是针对以后各篇的数据类型进行一个实质性的演示。因此希望大家具体看了各种数据结构的分析之后再看这篇。 主要包括如下几个方面的演示:1. 堆栈。 演示了一个利用堆栈作的RPN计算器2. 排序表。演示了一个利用排序表做的多项式表达式的加法运算3. 广义树。演示了深度遍历和广度遍历4. N叉树。演示了N叉树的生成插入删除等基本操作5. 表达式树。演示了一个用二叉树和堆栈做的可以将一个后缀表达式翻译为日常中熟悉的中缀表达式的例子6. AVL树。演示了基本操作 using System;using System.Coll
数据结构与算法(C#实现)系列---AVLTree之一(转)
using System;using System.Collections;namespace DataStructure{ /// <summary> /// AVLTree 的摘要说明。-----平衡二叉查找树 /// </summary> public class AVLTree:BST { protected int height;//空树的高定义为-1; //构造一棵空的二叉查找树 public AVLTree():base() { // // TODO: 在此处添加构造函数逻辑 // height=-1; } public AVLTree(object _obj):base(_obj) {
数据结构与算法(C#实现)系列---二叉树(转)
using System;using System.Collections;namespace DataStructure{ /// <summary> /// BinaryTree 的摘要说明。 /// </summary> public class BinaryTree:NaryTree { //构造二叉空树 public BinaryTree():base(2) { // // TODO: 在此处添加构造函数逻辑 // } public BinaryTree(object _obj):base(2,_obj) {}//------------------------------------------------------------------ protected override
数据结构与算法(C#实现)系列---N叉树(二)(转)
数据结构与算法(C#实现)系列---N叉树(二) Heavenkiller(原创)public override uint Degree { get { return this.degree; } } //------------------------------------------------------------------------------------- //只用于空树结点 public virtual void AttachKey(object _obj) { if(!IsEmpty())
C#冒泡算法(转)
参加多次笔试,居然有几次都考到了冒泡算法,一次是C#版的填空,一次是javascript版的全部写出。 虽然每次都凭着我对冒泡法的理解给弄出来的,但是多多少少与标准模式有点差别,在网上搜了一下关于C#版的冒泡算法,居然也没有一个象样的,自己对照算法模式认真写了一个C#版的,已经测试成功。 同时附上【冒泡排序动画演示】 public void BubbleSort(int[] R) { int i,j,temp; //交换标志 bool exchange; //最多做R.Length-1趟排序 for(i=0; i<R.Length; i++) { //本趟排序开始前,交换标志应为假 exchange=fa
数据结构与算法(C#实现)系列---二叉堆(数组实现)(转)
数据结构与算法(C#实现)系列---二叉堆(数组实现)using System;using System.Collections;namespace DataStructure{ /// <summary> /// BinaryHeap 的摘要说明。-------二叉堆(基于数组的实现) /// </summary> public class BinaryHeap:IPriorityQueue { protected ArrayList array; //建立一个最多容纳_length个对象的空二叉堆 public BinaryHeap(uint _length) { // // TODO: 在此处添加构造函数逻辑 // array=
C#算法(三)希尔排序(转)
朋友们,我最近加紧写C#的一些算法。选择排序,插入算法是我已经推出的。现推出希尔排序.今后,如有时间我将依次推出其它的算法编写。 希尔排序是将组分段,进行插入排序. 对想提高C#语言编程能力的朋友,我们可以互相探讨一下。 如:下面的程序,并没有实现多态,来,帮它实现一下。using System; public class ShellSorter { public void Sort(int [] list) { int inc; for(inc=1;inc<=list.Length/9;inc=3*inc+1); for(;inc>0;inc/=3) { for(int i=inc+1;i<=list.Length;i+=inc) { int t=list[i-1]; in
选择排序(转)
嗨!朋友们,C#将是未来网络开发的首选语言。本人用了C#开发出选择排序算法。希望能为C#语言的学习者带来一些益处。 不要忘了,学语言要花大力气学数据结构和算法。 using System; public class SelectionSorter { // public enum comp {COMP_LESS,COMP_EQUAL,COMP_GRTR}; private int min; // private int m=0; public void Sort(int [] list) { for(int i=0;i<list.Length-1;++i) { min=i; for(int j=i+1;j<list.Length;++j) { if(list[j]<list[min]) min=j; } int t=list[min]; list[mi
C#算法(二)插入排序(转)
朋友们,我最近加紧写C#的一些算法。选择排序已经推出的。现推出插入算法。 对想提高C#语言编程能力的朋友,我们可以互相探讨一下。 如:下面的程序,并没有实现多态,来,帮它实现一下。 using System; public class InsertionSorter { public void Sort(int [] list) { for(int i=1;i<list.Length;++i) { int t=list[i]; int j=i; while((j>0)&&(list[j-1]>t)) { list[j]=list[j-1]; --j; } list[j]=t; } } } public class MainClass { public static void Main() { int[
利用C#实现标准的Dispose模式(转)
本文讲解的是你在建立包含内存以外资源的类型,特别是处置非内存资源的时候,如何编写自己的资源管理代码。 我们已经知道了处置那些占用非受控(unmanaged)资源的对象的重要性,现在应该编写资源管理代码来处置那些包含非内存资源的类型了。整个.NET框架组件都使用一个标准的模式来处理非内存资源。使用你建立的类型的用户也希望你遵循这个标准的模式。标准的处理模式的思想是这样的:当客户端记得的时候使用IDisposable接口释放你的非受控资源,当客户端忘记的时候防护性地使用终结器(finalizer)。它与垃圾收集器(Garbage Colle
Singleton设计模式的C#实现之一(转)
Singleton模式 Singleton(译为单件或单态)模式是设计模式中比较简单而常用的模式。 有些时候在整个应用程序中,会要求某个类有且只有一个实例,这个时候可以采用Singleton模式进行设计。用Singleton模式设计的类不仅能保证在应用中只有一个实例,而且提供了一种非全局变量的方法进行全局访问,称为全局访问点,这样对于没有全局变量概念的纯面向对象语言来说是非常方便的,比如C#。 本文用一个计数器的例子来描述在C#中如何使用Singleton模式:计数的值设计为计数器类的一个私有成员变量,它被4个不同的线程进行读写操作
Singleton设计模式的C#实现之二(转)
Singleton模式的实现有两个技巧:一是使用静态成员变量保存“全局”的实例,确保了唯一性,使用静态的成员方法instance() 代替 new关键字来获取该类的实例,达到全局可见的效果。二是将构造方法设置成为private,如果使用new关键字创建类的实例,则编译报错,以防编程时候笔误。 上面方法二的初始化方式称为lazy initialization,是在第一次需要实例的时候才创建类的实例,与方法一中类的实例不管用不用一直都有相比,方法二更加节省系统资源。但是方法二在多线程应用中有时会出现多个实例化的现象。 假设这里有2个线程:主线程和
用设计模式固化C#程序(转)
译序: C#进阶文章。译者对Samir提供的C#例子进行了简单整理(作者提供的某些代码在译者的环境中无法通过编译),并编写了对应的C++示例,一并置于译注中,以便读者比对。译文中所有C#、C++程序调试环境均为Microsoft Visual Studio.NET 7.0 Beta2。 概要: 通过提供一个框架,设计模式可以解决应用开发中的许多问题。模式使得设计过程更加清晰高效,它特别适用于C#程序开发,因为C#是面向对象的语言。【译注:因为设计模式的由来和出发点就是描述面向对象的(可复用的)软件设计】现有的设计模式为你自己的类的设计提供了优秀的模板,使用
设计模式之C#实现(四)---- ProtoType之二(转)
下面是一个浅拷贝的例子: using System; namespace Prototype_Shallow{ //因为我们在FCL里面已经有这样的接口所以我们就不定义新的Prototype了 public class ConcretePrototype1 : ICloneable{ private int m_ID; public int ID{ get{ return this.m_ID; } } public ConcretePrototype1(int id){ this.m_ID = id; } public object Clone(){ return this.MemberwiseClone(); } } public class ConcretePrototype2 : ICloneable{ private int m
设计模式之C#实现(四)---- ProtoType之三(转)
我们具体的原型都继承了接口ICloneable,同时也实现了该接口里面唯一个一个方法Clone。我们可以在客户端这样创建对象ConcretePrototype1 p1 = new ConcretePrototype1(1); ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();首先我们创建了对象p1,接下来我们用通过p1的科隆方法得到了对象c1,这就是一种浅拷贝(因为MemberwiseClone是浅拷贝)。 接下来我们将要实现的是深拷贝,这个一个相对浅拷贝比较困难的工作,我们在拷贝对象的时候不但要拷贝他的数值型字段同时还要复制它的引用字段(有的时候这种工作是非常困难的也许是
设计模式之C#实现(四)---- ProtoType之一(转)
该模式的意图是:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。那么首先我们应该已经有了一个对象,同时这个对象还支持自我复制(科隆)。在FCL里面我们知道有一个接口专门用来规定这么一个契约,那就是ICloneable接口,该接口只有一个方法Clone,以下MSDN对该接口中对该接口的方法的说明:创建作为当前实例副本的新对象。Clone 既可作为深层副本实现,也可作为浅表副本实现。在深层副本中,所有的对象都是重复的;而在浅表副本中,只有顶级对象是重复的,并且顶级以下的对象包含引用。结果克隆必须与原始实例具有相
设计模式之C#实现(一)--AbstractFactory之三(转)
GOF书中的例子用C#实现的源码: using System; namespace AbstractFactory_Maze{ using Maze; public interface AbstractFactory{ MazeClass MakeMaze(); Wall MakeWall(); Room MakeRoom(int n); Door MakeDoor(Room oneRoom,Room otherRoom); } public class MazeFactory : AbstractFactory{ public MazeClass MakeMaze(){ return new MazeClass(); } public Wall MakeWall(){ return new Wall(); } public Room MakeRoom(int n){ return n
设计模式之C#实现(一)--AbstractFactory之五(转)
namespace Maze{ using System.Collections; public class MapSite{ public virtual void Enter(){} } public enum Direction {North,South,East,West} public class Room : MapSite{ public string Print(){ string result = ""; for(int i = 0 ;i<=3;i++){ switch(i){ case (int)Direction.East:{ result += "East is:"+this.GetSide(Direction.East)+" "; break; } case (int)Direction.North:{ result += "No