`
nlx0201
  • 浏览: 28981 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

C#数据结构和算法学习系列十四----集合

 
阅读更多

所谓集合是特殊元素们的一种聚合。集合的元素被称为是成员。集合有两个最重要的属性,一个是集合成员都是无序的,另一个则是集合的成员不会出现超过一次。本节讨论用散列表作为潜在的数据存储来提供一种十分简单的实现。用这种实现所产生的问题就是它的效率问题。人们把集合定义成相关成员的无序聚集,而且集合中的成员不会出现超过一次。集合书写成用一对闭合大括号包裹成员列表的形式,例如{0,1,2,3,4,5,6,7,8,9}。只要全部成员只书写一次,就可以按照任意顺序书写集合。

1.集合的散列实现。

public class CSet
{
     private Hashtable data;
     public CSet()
     {
          data = new Hashtable();
     }
     public void Add(Object item)//添加成员
     {
          if (!data.ContainsValue(item))
               data.Add(Hash(item), item);
     }
     public void Remove(Object item)//移除成员
     {
          data.Remove(Hash(item));
     }
     public int Size()//集合大小
     {
          return data.Count;
     }
     public CSet Union(CSet aSet)//合并集合
     {
          CSet tempSet = new CSet();
          foreach (Object hashObject in data.Keys)
               tempSet.Add(this.data[hashObject]);
          foreach (Object hashObject in aSet.data.Keys)
               if (!(this.data.ContainsKey(hashObject)))
                    tempSet.Add(aSet.data[hashObject]);
          return tempSet;
     }
     public CSet Intersection(CSet aSet)//检查是否会在传递的集合内找到该关键字
     {
          CSet tempSet = new CSet();
          foreach (Object hashObject in data.Keys)
          if (aSet.data.Contains(hashObject))
               tempSet.Add(aSet.data[hashObject]);
          tempSet.Add(aSet.GetValue(hashObject))
          return tempSet;
     }
     public bool Subset(CSet aSet)//检查一个集合是否包含另一个集合
     {
          if (this.Size() > aSet.Size())
               return false;
          else
               foreach (Object key in this.data.Keys)
                    if (!(aSet.data.Contains(key)))
                         return false;
          return true;
     }
}

测试代码如下:

static void Main()
{
     CSet setA = new CSet();
     CSet setB = new CSet();
     setA.Add(" milk");
     setA.Add(" eggs");
     setA.Add(" bacon");
     setA.Add(" cereal");
     setB.Add(" bacon");
     setB.Add(" eggs");
     setB.Add(" bread");
     CSet setC = new CSet();
     setC = setA.Union(setB);
     Console.WriteLine();
     Console.WriteLine("A: " + setA.ToString());
     Console.WriteLine("B: " + setB.ToString());
     Console.WriteLine("A union B: " + setC.ToString());
     setC = setA.Intersection(setB);
     Console.WriteLine("A intersect B: " + setC.ToString());
     setC = setA.Difference(setB);
     Console.WriteLine("A diff B: " + setC.ToString());
     setC = setB.Difference(setA);
     Console.WriteLine("B diff A: " + setC.ToString());
     if (setB.Subset(setA))
          Console.WriteLine("b is a subset of a");
     else
          Console.WriteLine("b is not a subset of a");
}

分享到:
评论

相关推荐

    C#算法和数据结构学习

    其中包括了线性表、栈和队列、串和数组、树和图等数据结构的操作、排序等,非常适合进阶级的...其中需要的预备知识数学中的集合、对数、递归等的回顾,还有C#语法中的接口和泛型的温习,从而更快的接受数据结构和算法。

    (数据结构与算法:C#语言描述(英文)

    这本书为C#语言程序员提供了学习基础数据结构与算法的机会。 C#语言根植在一个功能非常丰富的.NET 框架开发环境中。在.NET 框架库中包含有一套数据结构类(也称为集合类)。这套类的范围从Array 类、ArrayList 类和...

    C#数据结构

    先确定相应的数据结构,然后再根据数据结构和问题的需要设计相应的算法。由 于篇幅所限,下面只从算法的特性、算法的评价标准和算法的时间复杂度等三个 方面进行介绍。 1.2.1 算法的特性 算法(Algorithm)是对某一...

    数据结构 C#语言版 1

    1 1 1 学习数据结构的必要性 1 1 1 2 基本概念和术语 1 1 2 算法 4 1 2 1算法的特性 4 1 2 2算法的评价标准 5 1 2 3算法的时间复杂度 6 1 3 数学预备知识 7 1 3 1 集合 7 1 3 2 常用的数学术语 8 1 3 3 对数 8 1 3 4...

    3.数据结构(C#语言版)

    本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;...

    数据结构 (C#语言版)

    1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语........................................................................

    30.数据结构(C#语言版)高清版

    1.1.1 学习数据结构的必要性...1 1.1.2 基本概念和术语...............1 1.2 算法...4 1.2.1算法的特性............................4 1.2.2算法的评价标准....................5 1.2.3算法的时间复杂度...............

    数据结构(C#语言版)

    1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语......................................................................

    数据结构(C#语言版)

    本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;...

    数据结构 c#版

    1 1 1 学习数据结构的必要性 1 1 1 2 基本概念和术语 1 1 2 算法 4 1 2 1算法的特性 4 1 2 2算法的评价标准 5 1 2 3算法的时间复杂度 6 1 3 数学预备知识 7 1 3 1 集合 7 1 3 2 常用的数学术语 8 1 3 3 对数 8 1 3 4...

    数据结构(c#语言版)

    本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;...

    数据结构(C#语言版).

    1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语........................................................................

    C#版数据结构(C#语言版)

    1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语........................................................................

    数据结构(C#语言)

    1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语......................................................................

    C#数据结构(2.0版)电子书

    1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语........................................................................

    C-Sharp-Data-Structures-and-Algorithms:Packt出版的《 C Sharp数据结构和算法》

    C#数据结构和算法这是发布的的代码存储库。 它包含从头到尾完成本书所必需的所有支持项目文件。关于这本书数据结构可以有效地组织数据。 它们对于各种问题至关重要,它们的适当实现可以提供像可重用代码一样起作用...

Global site tag (gtag.js) - Google Analytics