数据结构和算法 – 10.集合

 

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 数据结构和算法
{
    public partial class CSet
    {

        static void Main()
        {

        }
    }

    public partial class CSet
    {
        private Hashtable data;
        public CSet()
        {
            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 CSet Union(CSet aSet)
        {
            CSet tempSet = new CSet();
            foreach (var hashObject in data.Keys)
            {
                tempSet.Add(this.data[hashObject]);
            }
            foreach (var hashObject in aSet.data.Keys)
            {
                if (!data.ContainsKey(hashObject))
                {
                    tempSet.Add(aSet.data[hashObject]);
                }
            }
            return tempSet;
        }

        //
        public CSet Intersection(CSet aSet)
        {
            CSet tempSet = new CSet();
            foreach (var hashObject in data.Keys)
            {
                if (aSet.data.Contains(hashObject))
                {
                    tempSet.Add(aSet.data[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;
        }

        public CSet Difference(CSet aSet)
        {
            CSet tempSet = new CSet();
            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;
        }
    }
}
时间: 2024-10-17 20:00:16

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

Java数据结构与算法之集合

线性表.链表.哈希表是常用的数据结构,在进行Java开发时,SDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中. 一.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object.一些Collection允许相同元素而另一些不行.一些能排序而另一些不行.Java  SDK不提供直接继承自Collection的类,Java  SDK提供的类都是继承自Collection的"子接口"如List和Set

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

这篇我们说说堆这种数据结构,其实到这里就暂时把java的数据结构告一段落,感觉说的也差不多了,各种常见的数据结构都说到了,其实还有一种数据结构是"图",然而暂时对图没啥兴趣,等有兴趣的再说:还有排序算法,emmm....有时间再看看吧! 其实从写数据结构开始到现在让我最大的感触就是:新手刚开始还是不要看数据结构为好,太无聊太枯燥了,很容易让人放弃:可以等用的各种框架用得差不多了之后,再回头静下心来搞搞数据结构还是挺有趣的:废话不多说,开始今天的内容: 1.二叉树分类 树分为二叉树和多叉

数据结构与算法之集合

集合 集合(set) 是一种包含不同元素的数据结构. 集合中的元素称为成员. 集合的两个最重要特性是: 首先, 集合中的成员是无序的: 其次, 集合中不允许相同成员存在. 对集合的三个操作 并集 将两个集合中的成员进行合并, 得到一个新集合. 交集 两个集合中共同存在的成员组成一个新的集合. 补集 属于一个集合而不属于另一个集合的成员组成的集合. 直接上代码.还是用ES6原生的Set比较方便. function Set(){ this.dataStore = []; } Set.prototyp

数据结构与算法10—图的遍历

图的遍历 1. 在图中有回路,从图中某一顶点出发访问图中其它顶点时,可能又会回到出发点,而图中可能还剩余有顶点没有访问到. 2. 我们可以设置一个全局型标志数组visited来标志某个顶点是否被访问过,未访问的值为0,访问过的值为1. 3. 图的遍历有两种方法:深度优先搜索遍历(DFS).广度优先搜索遍历(BFS). 深度优先搜索 深度优先搜索思想 首先访问顶点i,并将其访问标记置为访问过,即visited[i] =1: 然后搜索与顶点i有边相连的下一个顶点j,若j未被访问过,则访问它,并将j的

研磨数据结构与算法-10二叉树的基本概念

二叉树节点: /* * 二叉树节点 */ public class Node { //数据项 public long data; //左子节点 public Node leftChild; //右子节点 public Node rightChild; /** * 构造方法 * @param data */ public Node(long data) { this.data = data; } } 二叉树类: /* * 二叉树类 */ public class Tree { //根节点 priv

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

数据结构和算法是什么? 从广义上讲,数据结构就是指一组数据的存储结构.算法就是操作数据的一组方法. 从狭义上讲,是指某些著名的数据结构和算法,比如队列.堆.栈.二分查找.动态规划等. 数据结构和算法有什么关系? 数据结构和算法是相辅相成的.数据结构是为算法服务的,算法要作用在特定的数据结构之上.因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构. 为什么要学数据结构和算法? 如果不学数据结构和算法: 难以通过大公司的面试 编写的代码运行效率低下,占用存储空间大 写出来的框架Bug多.

java常用的数组、字符串、集合操作以及数据结构与算法基本知识

java中常用封装的数组 .字符串. 集合来操作对象,但数据结构中常用的有栈和队列   数与图以及他们之间的排序,查找. 数组声明没有分配内存空间  只有创建或者是初始化时才分配,创建时把数组中的数据类型数据所在的内存空间首地址赋值给数组名,在创建每个对象时,都会给该对象分配地址和它存储的数据 .如变量    int arr[]; int arr[]={1,2,3};  arr=new int[10] ,int arr[][]={{1,9,7},{1,2,3}}  int arr[][]=new

常见数据结构与算法整理总结(上)

数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作.算法是为求解一个问题需要遵循的.被清楚指定的简单指令的集合.下面是自己整理的常用数据结构与算法相关内容,如有错误,欢迎指出. 为了便于描述,文中涉及到的代码部分都是用Java语言编写的,其实Java本身对常见的几种数据结构,线性表.栈.队列等都提供了较好的实现,就是我们经常用到的Java集合框架,有需要的可以阅读这篇文章.Java - 集合框架完全解析 一.线性表 1.数组实现 2.链表 二.栈与队列 三.树

数据结构与算法5: 递归(Recursion)

数据结构与算法5: 递归(Recursion) 写在前面 <软件随想录:程序员部落酋长Joel谈软件>一书中<学校只教java的危险性>一章提到,大学计算机系专业课有两个传统的知识点,但许多人从来都没搞懂过,那就是指针和递归.我也很遗憾没能早点熟练掌握这两个知识点.本节一些关键知识点和部分例子,都整理自教材或者网络,参考资料列在末尾.如果错误请纠正我. 思考列表: 1)什么程序具有递归解决的潜质? 2)递归还是非递归算法,怎么选择? 3)递归程序构造的一般模式 1.递归定义 首要引