在c#中使用泛型创建树

时间:2014-03-19 16:53:35

标签: c# generics data-structures generic-programming huffman-code

我是c#的新手,我刚刚完成huffman tree,现在下一步就是generic我的意思是symbol适用于每个data type。由于我是c#beginner,我需要一些基本的想法来做到这一点。

我的霍夫曼树由3个班级组成。类huffman,node和MyClass(包含主函数),其中freqsymbol重复它们的结构的次数,如下所示:

namespace final_version_Csharp
{
    public Class Huffman 
    {
        public classNode 
        {
            public Node next, left, right;
            public int symbol;
            public int freq;
        }
        public Node root;
    }
    public void huffman_node_processing() 
    {
        //done the addition of two minimum freq here
    }
    public void GenerateCode(Node parentNode, string code) 
    {
        //done the encoding work here
    }

    public class MyClass 
    {
        public static void Main(string[] args) 
          {
            Huffman ObjSym = new Huffman(args); //object creation by reading the data fron a file at   sole argument
            //All other methods are here
            ObjSym.huffman_node_processing(); //this for adding the two minimum nodes
            ObjSym.GenerateCode(ObjSym.root, ""); //this for encoding
           }
    }
}

有人可以帮助我使这个“符号”适用于所有数据类型,如“短”,“长”等。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,你基本上会做类似

的事情
namespace final_version_Csharp
{
    public Class Huffman<K> where K :  IComparable<K>
    {
        public classNode<K> 
        {
            public Node next, left, right;
            public K symbol;
            public int freq;
        }
        public Node root;
    }
...
    public class MyClass 
    {
        public static void Main(string[] args) 
          {
            Huffman ObjSym = new Huffman<int>(); 
            //All other methods are here
            ObjSym.huffman_node_processing(); //this for adding the two minimum nodes
            ObjSym.GenerateCode(ObjSym.root, ""); //this for encoding
           }
    }
}

答案 1 :(得分:1)

您需要在此处使用interface

public interface IMyType
{
    int Symbol { get; set; }
    int Freq { get; set; }
}

然后将其用于您希望能够一般使用的所有类。所以

public class ClassA : IMyType
{
    ...
    public int Symbol { get; set; }
    public int Freq { get; set; }
    ...
}

public class ClassB : IMyType
{
    ...
    public int Symbol { get; set; }
    public int Freq { get; set; }
    ...
}

然后你可以在像这样的方法中使用这些对象

void SomeMethod(IMyType o)
{
    o.Symbol = 1;
    o.Freq = 2;
    ...
}

IMyType a = new ClassA();
IMyType b = new ClassB();
SomeMethod(a);
SomeMethod(b);

我希望这会有所帮助。