数据结构和算法 – 10.集合
集合:
联合、交叉、差异、子集
- 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.集合的更多相关文章
- java数据结构和算法10(堆)
这篇我们说说堆这种数据结构,其实到这里就暂时把java的数据结构告一段落,感觉说的也差不多了,各种常见的数据结构都说到了,其实还有一种数据结构是“图”,然而暂时对图没啥兴趣,等有兴趣的再说:还有排序算 ...
- JavaScript数据结构与算法(八) 集合(ECMAScript 6中定义的类似的Set类)
TypeScript方式实现源码 // 特性: // 1. 集合是由一组无序且唯一(即不能重复)的项组成的.这个数据结构使用了与有限集合相同的数学概念,但应用在计算机科学的数据结构中. // 2. 也 ...
- 数据结构和算法(What Why How)
数据结构和算法是什么? 从广义上讲,数据结构就是指一组数据的存储结构.算法就是操作数据的一组方法. 从狭义上讲,是指某些著名的数据结构和算法,比如队列.堆.栈.二分查找.动态规划等. 数据结构和算法有 ...
- 数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法
算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法 ...
- JavaScript 版数据结构与算法(四)集合
今天,我们要讲的是数据结构与算法中的集合. 集合简介 什么是集合?与栈.队列.链表这些顺序数据结构不同,集合是一种无序且唯一的数据结构.集合有什么用?在 Python 中,我经常使用集合来给数组去重: ...
- Java的数组,集合,数据结构,算法(一)
本人的愚见,博客是自己积累对外的输出,在学习初期或自己没有多少底料的情况下,与其总结写博客不如默默去搞自己的代码,但是学到集合这一块时,数组,集合,数据结构,算法这个概念搞的我比较混淆,所以不得已写这 ...
- 为什么我要放弃javaScript数据结构与算法(第六章)—— 集合
前面已经学习了数组(列表).栈.队列和链表等顺序数据结构.这一章,我们要学习集合,这是一种不允许值重复的顺序数据结构. 本章可以学习到,如何添加和移除值,如何搜索值是否存在,也可以学习如何进行并集.交 ...
- JavaScript数据结构与算法-集合练习
集合的实现 function Set () { this.dataStore = []; this.add = add; this.remove = remove; this.size = size; ...
- HDU 3791 二叉搜索树 (数据结构与算法实验题 10.2 小明) BST
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3791 中文题不说题意. 建立完二叉搜索树后进行前序遍历或者后序遍历判断是否一样就可以了. 跟这次的作业第 ...
随机推荐
- BZOJ1861——book
就是给你一摞书,然后又询问第k大,编号为x的书是第几大,然后修改书的位置 splay模板题...然而我还是不会,,,又遇到lrj的书的坑了,rj的书里没有father,顿时弄得我ask不会搞了 注意合 ...
- css代码优化
一.CSS代码优化作用与意义 1.减少占用网页字节.在同等条件下缩短浏览器下载css代码时间,相当于加快网页打开速度2.便于维护.简化和标准化css代码让css代码减少,便于日后维护3.让自己写的cs ...
- [转载]javascript创建对象的几种方式
原文链接:http://qingfeng825.iteye.com/blog/1935648 1. 工厂方法:能创建并返回特定类型对象的工厂函数(factory function). function ...
- ubuntu14.04 us sources.list
deb http://us.archive.ubuntu.com/ubuntu/ trusty main restricted deb-src http://us.archive.ubuntu.com ...
- WPF 中更新界面信息
1.Dispatcher.BeginInvoke int ii = 0; new Thread(new ParameterizedThreadStart((i) => { while (true ...
- Visual Studio与Chrome调试工具使用技巧
VS: 1: Ctrl + Enter (在光标指定位置的上面添加一行,并将光标移至新添加行的行首位置) Ctrl + Shift + Enter (在光标指定位置的下面添加一行,并将光标移至新添加行 ...
- 【leetcode】Valid Number
Valid Number Validate if a given string is numeric. Some examples:"0" => true" 0.1 ...
- java map的四种遍历
四种遍历: public static void main(String[] args) { Map<String, String> map = new HashMap<String ...
- PHP带重试功能的curl
2016年1月13日 10:48:10 星期三 /** * @param string $url 访问链接 * @param string $target 需要重试的标准: 返回结果中是否包含$tar ...
- 2.js模式-单例模式
1. 单例模式 单例模式的核心是确保只有一个实例,并提供全局访问. function xx(name){}; Singleton.getInstance = (function(){ var inst ...