Exemplo n.º 1
0
        /// <summary>
        /// you can inter a data and get a set with a header and the node that has that data
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static DisjointSetLInkedLIstFormNode <T> Make(T data)
        {
            DisjointSetLInkedLIstFormNode <T> node   = new DisjointSetLInkedLIstFormNode <T>();
            ListHeaderLinkedList <T>          header = new ListHeaderLinkedList <T>();

            node.Data             = data;
            node.Next             = null;
            node.HeaderLinkedList = header;
            header.Head           = node;
            header.Tail           = node;
            header.nodes.AddFirst(node);
            return(node);
        }
Exemplo n.º 2
0
        private static void Join2Part(DisjointSetLInkedLIstFormNode <T> node1, DisjointSetLInkedLIstFormNode <T> node2)
        {
            ListHeaderLinkedList <T> node1Header = node1.HeaderLinkedList;
            ListHeaderLinkedList <T> node2Header = node2.HeaderLinkedList;

            for (int i = 0; i < node1Header.nodes.Count; i++)
            {
                DisjointSetLInkedLIstFormNode <T> temp = node1Header.nodes.First();
                node1Header.nodes.RemoveFirst();
                node2Header.Tail.Next = temp;
                node2Header.Tail      = temp;
                temp.Next             = null;
                temp.HeaderLinkedList = node2Header;
            }
        }
Exemplo n.º 3
0
        public static void Union(DisjointSetLInkedLIstFormNode <T> node1, DisjointSetLInkedLIstFormNode <T> node2)
        {
            //we suppose to it is true then we change it if neccessery
            DisjointSetLInkedLIstFormNode <T> nodeWithSmallList = node2;
            DisjointSetLInkedLIstFormNode <T> nodeWithBigList   = node1;

            if (IsUnion(node1, node2))
            {
                return;
            }
            else
            {
                if (node1.HeaderLinkedList.nodes.Count < node2.HeaderLinkedList.nodes.Count)//if other list is smaller
                {
                    nodeWithBigList   = node2;
                    nodeWithSmallList = node1;
                }
                Join2Part(nodeWithSmallList, nodeWithBigList);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// it checks that  repreesener node is equal
        /// </summary>
        /// <param name="node1"></param>
        /// <param name="node2"></param>
        /// <returns></returns>

        public static bool IsUnion(DisjointSetLInkedLIstFormNode <T> node1, DisjointSetLInkedLIstFormNode <T> node2)
        {
            return(Find(node1).Equals(Find(node2)));
        }
Exemplo n.º 5
0
 /// <summary>
 /// it gets us repreesener node of that part
 /// </summary>
 /// <param name="node"></param>
 /// <returns></returns>
 public static DisjointSetLInkedLIstFormNode <T> Find(DisjointSetLInkedLIstFormNode <T> node)
 {
     return(node.HeaderLinkedList.Head);
 }