集合:

联合、交叉、差异、子集

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 数据结构和算法
{ public partial class SCet
{
static void Main()
{
SCet setA = new SCet();
SCet setB = new SCet();
setA.Add("milk");
setA.Add("eggs");
setA.Add("bacon");
setA.Add("cereal");
setB.Add("bacon");
setB.Add("eggs");
setB.Add("bread");
SCet setC = new SCet();
setC = setA.Union(setB);
Console.WriteLine();
Console.WriteLine("A: " + setA);
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"); Console.Read();
}
} public partial class SCet
{
private Hashtable data;
public SCet()
{
data = new Hashtable();
}
//More code to follow public void Add(Object item)
{
if (!data.ContainsValue(item))
{
data.Add(Hash(item), item);
}
} public string Hash(object item)
{
char[] chars;
string s = item.ToString();
int hashValue = 0;
chars = s.ToCharArray();
for (int i = 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()
{
return data.Count;
} //联合:把一个集合的成员与另一个集合的成员合并从而获得新的集合。
public SCet Union(SCet aSet)
{
SCet tempSet = new SCet();
foreach (var hashObject in data.Keys)
{
tempSet.Add(data[hashObject]);
}
foreach (var hashObject in aSet.data.Keys)
{
if (!data.ContainsKey(hashObject))
{
tempSet.Add(aSet.data[hashObject]);
}
}
return tempSet;
} //交叉:把已经存在于另一个集合的所有成员添加给一个集合从而获得新的集合。
public SCet Intersection(SCet aSet)
{
SCet tempSet = new SCet();
foreach (var hashObject in data.Keys)
{
if (aSet.data.Contains(hashObject))
{
tempSet.Add(aSet.data[hashObject]);
}
}
return tempSet;
} //是否为子集
public bool Subset(SCet 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;
} //差异:把不存在于另一个集合的所有成员添加给一个集合从而获得新的集合。
public SCet Difference(SCet aSet)
{
SCet tempSet = new SCet();
foreach (Object hashObject in data.Keys)
{
if (!(aSet.data.Contains(hashObject)))
tempSet.Add(data[hashObject]);
}
return tempSet;
} public override string ToString()
{
string s = "";
foreach (Object key in data.Keys)
s += data[key] + " ";
return s;
}
}
}

数据结构和算法 – 10.集合的更多相关文章

  1. java数据结构和算法10(堆)

    这篇我们说说堆这种数据结构,其实到这里就暂时把java的数据结构告一段落,感觉说的也差不多了,各种常见的数据结构都说到了,其实还有一种数据结构是“图”,然而暂时对图没啥兴趣,等有兴趣的再说:还有排序算 ...

  2. JavaScript数据结构与算法(八) 集合(ECMAScript 6中定义的类似的Set类)

    TypeScript方式实现源码 // 特性: // 1. 集合是由一组无序且唯一(即不能重复)的项组成的.这个数据结构使用了与有限集合相同的数学概念,但应用在计算机科学的数据结构中. // 2. 也 ...

  3. 数据结构和算法(What Why How)

    数据结构和算法是什么? 从广义上讲,数据结构就是指一组数据的存储结构.算法就是操作数据的一组方法. 从狭义上讲,是指某些著名的数据结构和算法,比如队列.堆.栈.二分查找.动态规划等. 数据结构和算法有 ...

  4. 数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法

    算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法 ...

  5. JavaScript 版数据结构与算法(四)集合

    今天,我们要讲的是数据结构与算法中的集合. 集合简介 什么是集合?与栈.队列.链表这些顺序数据结构不同,集合是一种无序且唯一的数据结构.集合有什么用?在 Python 中,我经常使用集合来给数组去重: ...

  6. Java的数组,集合,数据结构,算法(一)

    本人的愚见,博客是自己积累对外的输出,在学习初期或自己没有多少底料的情况下,与其总结写博客不如默默去搞自己的代码,但是学到集合这一块时,数组,集合,数据结构,算法这个概念搞的我比较混淆,所以不得已写这 ...

  7. 为什么我要放弃javaScript数据结构与算法(第六章)—— 集合

    前面已经学习了数组(列表).栈.队列和链表等顺序数据结构.这一章,我们要学习集合,这是一种不允许值重复的顺序数据结构. 本章可以学习到,如何添加和移除值,如何搜索值是否存在,也可以学习如何进行并集.交 ...

  8. JavaScript数据结构与算法-集合练习

    集合的实现 function Set () { this.dataStore = []; this.add = add; this.remove = remove; this.size = size; ...

  9. HDU 3791 二叉搜索树 (数据结构与算法实验题 10.2 小明) BST

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3791 中文题不说题意. 建立完二叉搜索树后进行前序遍历或者后序遍历判断是否一样就可以了. 跟这次的作业第 ...

随机推荐

  1. Understand:高效代码静态分析神器详解(转)

    之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面,虽说很多东西都方便了,但是却没有了静态代码分析工具,很幸运,前段时间找到一款比source ins ...

  2. 瀑布流js排列

    var _px = document.getElementById("px"); var con=document.getElementById("content&quo ...

  3. Laravel5.1-Eloquent ORM:起步

    概述 有很多朋友问,MCV的M是在哪里介绍的,这里就是介绍M的地方了.Laravel有一个强大的数据库ORM Eloquent,它的原理是每张数据表对应一个Model,对Model的操作就对应数据库的 ...

  4. word20161203

    B-channel / B 信道 B-ISDN, broadband integrated services digital network / 广播综合业务数字网络 backbone router  ...

  5. 跟着百度学PHP[4]OOP面对对象编程-9-封装性,访问控制[private、pubic、protected]

    其实之前就已经在封装的时候说到了.这个也属于封装的范畴吧. 用到的三个关键字(旁边是其中文翻译) private(私有的) public(公众的) protected(受保护的) 00X1 priva ...

  6. 一起入门python3之元组和数列

    这一节我们来说一下,元组(tupe)&数列(list).每天苦逼的工作不易啊,哎.不过呢一腔热血学习.哈哈哈哈 #井号代表注释哈. 0x01 数列-list        数列可以说是一种集合 ...

  7. JS中try....catch

    1.事情还有得挽回,换条路走try { 执行某个逻辑} catch (e) { 出问题,换个逻辑执行} 2.体面的退出try { 正常流程} catch (e) { 弹个框告诉用户不好意思出了点问题 ...

  8. am335x 虚拟机环境变量的设置及注释

    我用的还是老的Linux3.2.0的内核,只是借用了TI am335x SDK 3.0里面的工具. 首先下载TI官方的SDK,上一章已经安装了一个Ubuntu14.04的虚拟机. TI 最新的SDK下 ...

  9. Codeforces Gym 101138 D. Strange Queries

    Description 给你一下长度为 \(n\) 的序列. \(a_i=a_j\) \(l_1 \leqslant i \leqslant r_1\) \(l_2 \leqslant i \leqs ...

  10. Valgrind 3.11.0编译安装

    Valgrind 3.11.0编译安装 Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind遵守GNU通用公共许可证条款,是一款自由软件. 到3.3.0版本为 ...