《数据结构与算法C#语言描述》笔记13_集合

十三.集合

集合的定义

集合成员是无序的、并且都是只出现一次。

空集合:是不包含任何成员的集合。

全域:是所有可能成员的集合。

集合的操作

联合:两个集合的并集

交叉:两个集合的交集

差异:存在于第一个集合,但不存在于第二个集合,也就是相对补集,A相对B的补集。

集合的属性(性质)

集合与空集合的交叉是空集合。集合与空集合的联合是集合本身。

集合与自身的交叉是自身,与自身的联合还是联合。

联合、交叉满足交换律、结合律、分配律。

吸收定律

集合A联合另一集合B再交叉自身集合A,结果还是集合A。

德摩根定律

集合A差异(集合B交叉集合C)等于(集合A差异集合B)联合(集合A差异集合B)。

集合A差异(集合B联合集合C)等于(集合A差异集合B) 交叉 (集合A差异集合B)。

用散列表实现一个Set集合类

用散列表可以存储任何类型的数据项。

内部实现

HashSet类:

 

    public class HashCSet

    {

        private Hashtabledata;

        public HashCSet()

        {data = new Hashtable();}

        ///<summary>

        ///添加一个数据项。Hashtable的值为item,键为item根据内部散列函数计算的散列值。

        ///</summary>

        ///<param name="item"></param>

        public void Add(Object item)

        {

           if (!data.ContainsValue(item))

           { data.Add(item, item); }

        }

        ///<summary>

        ///散列函数,数据项字符的ASCII码值来计算散列值

        ///</summary>

        ///<param name="item"></param>

        ///<returns></returns>

        private string Hash(object item)

        {

            char[]chars;

           string s = item.ToString();

           int hashvalue = 0;

           chars = s.ToCharArray();

           for (inti = 0; i <=chars.GetUpperBound(0); i++)

           {

               hashvalue += (int)chars[i];

           }

           return hashvalue.ToString();

        }

        public void Remove(object item)

        {

           data.Remove(Hash(item));

        }

        public int Size

        {

           get { returndata.Count; }

        }

        ///<summary>

        ///联合

        ///</summary>

        ///<param name="aSet"></param>

        ///<returns></returns>

        public HashCSetUnion(HashCSet aSet)

        {

           HashCSet tempSet = new HashCSet();

           foreach (ObjecthashObjectin data.Keys)

               tempSet.Add(this.data[hashObject]);

           foreach (ObjecthashObjectin aSet.data.Keys)

               if (!(this.data.ContainsKey(hashObject)))

                   tempSet.Add(aSet.data[hashObject]);

           return tempSet;

        }

        ///<summary>

        ///返回一个和指定集合交叉的集合

        ///</summary>

        ///<param name="aSet"></param>

        ///<returns></returns>

        public HashCSetIntersection(HashCSet aSet)

        {

           HashCSet tempSet = new HashCSet();

           foreach (ObjecthashObjectin data.Keys)

           {

               if (aSet.data.Contains(hashObject))

                   tempSet.Add(aSet.data[hashObject]);

           }

           return tempSet;

        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构算法C#语言描述》是在.NET框架下用C#语言实现数据结构算法的第一本全面的参考书。《数据结构算法C#语言描述》介绍的方法非常实用,采用了时间测试而非大O表示法来分析算法性能。内容涵盖了数据结构算法的基本原理,涉及数组、广义表、链表、散列表、树、图、排序搜索算法以及更多概率算法和动态规则等高级算法。此外,书中还提供了.NET框架类库中的C#语言实现的数据结构算法。   《数据结构算法C#语言描述》适合作为C#数据结构课程的教材,同时也适合C#专业人士阅读。 随着.NET框架的广泛应用,C#已经成为最受欢迎的程序设计语言之一。但是,市面上尚无用C#语言讲述数据结构算法的图书,广大C#程序员不得不将自 己转换C++或Java描述数据结构,费时费力,而且容易出错。   本书填补了这一空白。而且更加难能可贵的是,作者基于自己多年的教学和实践经验,从开发实战出发,采用了一种与一般数据结构图书不同的讲解方式:充分利 用.NET框架中现成的数据结构类,先讲述各种数据结构怎么在开发中选用,怎样用来解决实际问题,在有了感性认识之后,再深入研究如何实现;同时,用更加 实用的时间测试方法代替常规的大O表示法来分析算法性能,避免了复杂的数学推导。书中除涵盖了数组、广义表、链表、散列表、树、图、排序、搜索等常规数据 结构和算法外,还讨论了概率和动态规划等方面的高级算法。   中文版对原书的代码进行了全面的调试,改正了不少原版存在的问题,保证了代码的质量和技术内容的准确性。   本书是C#程序员不可或缺的实用参考书,也适合作为应用型高校相关专业.NET平台开发课程的教材。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值