Example #1
0
        private int LinkedListToNumber(CLinkedList c)
        {
            var start  = c.GetRoot();
            int dig    = 0;
            int number = 0;

            while (true)
            {
                if (start.Data != 0)
                {
                    int mutl = (int)Math.Pow(10, dig);
                    number += (start.Data * mutl);
                }
                else
                {
                    number += 0;
                }
                dig++;

                if (start.next == null)
                {
                    break;
                }
                start = start.next;
            }
            return(number);
        }
Example #2
0
        private Node FindALoop(CLinkedList cLinkedList)
        {
            var           root = cLinkedList.GetRoot();
            HashSet <int> hs   = new HashSet <int>();

            if (root != null)
            {
                var pointer = root;
                while (pointer.next != null)
                {
                    if (found(ref hs, pointer.Data))
                    {
                        return(pointer);
                    }
                    pointer = pointer.next;
                }
                if (found(ref hs, pointer.Data))
                {
                    return(pointer);
                }
            }


            return(cLinkedList.GetRoot());
        }
Example #3
0
        public CLinkedList LinkedList()
        {
            CLinkedList c = new CLinkedList();

            c.Insert(4);
            c.Insert(3);
            c.Insert(4);
            c.Insert(2);
            c.Insert(1);
            c.Insert(4);
            c.print();
            return(c);
        }
Example #4
0
        private CLinkedList NumberLinkedLis(int number)
        {
            CLinkedList c = new CLinkedList();
            int         n = number;

            while (n > 0)
            {
                int x = n % 10;
                c.Insert(x);
                n = n / 10;
            }
            return(c);
        }
Example #5
0
        public void SumList()
        {
            CLinkedList c = new CLinkedList();

            c.Insert(4);
            c.Insert(3);
            c.Insert(1);
            CLinkedList c2 = new CLinkedList();

            c2.Insert(5);
            c2.Insert(5);
            c2.Insert(0);
            c2.Insert(5);
            var number = LinkedListToNumber(c);
            var second = LinkedListToNumber(c2);
            int sume   = number + second;

            NumberLinkedLis(sume).print();
        }
Example #6
0
        public void FindDuplicate()
        {
            CLinkedList c = new CLinkedList();

            c.Insert(4);
            c.Insert(3);
            c.Insert(1);
            c.Insert(2);
            c.Insert(4);
            c.print();
            var node = FindALoop(c);

            if (node != c.GetRoot())
            {
                Console.WriteLine($"Faulty node is {node.Data}");
            }
            else
            {
                Console.WriteLine($"No faulty node in c");
            }
            CLinkedList c2 = new CLinkedList();

            c2.Insert(5);
            c2.Insert(1);
            c2.Insert(3);
            c2.Insert(4);
            c2.print();
            var node2 = FindALoop(c2);

            if (node2 != c2.GetRoot())
            {
                Console.WriteLine($"Faulty node is {node2.Data}");
            }
            else
            {
                Console.WriteLine($"No faulty node in c2");
            }
        }
Example #7
0
        public void TestCircularReference()
        {
            var a = new CLinkedList
            {
                Data = 69
            };

            var b = new CLinkedList
            {
                Data = 70
            };

            a.Next = b;
            b.Next = a;

            var c = new CSerializationContext();

            c.SetVerbose();
            var s   = new CSerializer(c);
            var doc = s.Serialize(a);

            Print(doc);
            var elem = doc.DocumentElement;

            var id = XmlExtensions.GetAttributeValue(elem, c.ReferenceIdAttributeName);

            Assert.AreEqual("69", XmlExtensions.GetElementValue(elem, "Data"), "The first node's data is wrong");
            var e2 = (XmlElement)elem.SelectSingleNode("Next");

            Assert.AreEqual("70", XmlExtensions.GetElementValue(e2, "Data"), "The second node's data is wrong");

            var e3  = (XmlElement)e2.SelectSingleNode("Next");
            var rid = XmlExtensions.GetAttributeValue(e3, c.ReferToAttributeName);

            Assert.AreEqual(id, rid, "The reference to the first node is wrong");
        }
Example #8
0
    public static Result josephus(int N, int K, int S)
    {
        // TODO: usando los metodos definidos en el Circurlar Linked List,
        // implementa una solucion al problema de Flavio Josefo
        //
        // Debes simular el juego con los parametros N, K y S:
        // * Tenemos N personas paradas alrededor de un circulo, donde N es la
        //   cantidad de personas al inicio del juego.  Para identificacion,
        //   cada persona es numerada desde 1 a N, en orden de la manecilla
        //   del reloj.
        // * En el inicio, la persona #1 es ejecutada.
        // * A partir de ahi, ejecutan a cada K persona (es decir, brincamos K-1
        //   personas).
        // * La simulacion se repite hasta que queden S sobrevivivientes,
        //   quienes decidir no seguir jugando este macabro juego.
        //
        // Devuelve un objeto de la clase Result, donde:
        //  a) el atributo execution_order contiene el orden de ejecucion de las
        //     personas aniquilidas en el proceso
        //  b) el atributo survisors contiene una lista de los sobrevivientes
        //     (en cualquier orden)
        //
        // Ejemplo: Para N=41, K=3 y S=2:
        // execution_orden = {
        //    1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 3, 8, 12,
        //    17, 21, 26, 30, 35, 39, 5, 11, 18, 24, 32, 38, 6, 15, 27, 36,
        //    9, 23, 41, 20, 2, 33
        // }
        // survivors = { 14, 29 }
        //
        // Asume que los parametors N, K, S tienen valores validos
        //

        //
        // Complejidad esperada: O(N*K) en worst-case
        // Valor: 5 puntos

        int cantidadVictimas = N - S;

        Result res = new Result();

        res.execution_order = new int[cantidadVictimas];
        res.survivors       = new int[S];

        if (N == S)
        {
            for (int n = 0; n < N; n++)
            {
                res.survivors[n] = n + 1;
            }
            return(res);
        }

        CLinkedList circuloDeLaMuerte = new CLinkedList();

        for (int n = 1; n <= N; n++)
        {
            circuloDeLaMuerte.add(n);
        }

        res.execution_order[0] = 1;
        circuloDeLaMuerte.locate(1);
        circuloDeLaMuerte.remove();

        for (int m = 1; m < cantidadVictimas; m++)
        {
            circuloDeLaMuerte.moveTo(K - 1);
            res.execution_order[m] = circuloDeLaMuerte.get();
            circuloDeLaMuerte.remove();
        }

        for (int s = 0; s < S; s++)
        {
            res.survivors[s] = circuloDeLaMuerte.get();
            circuloDeLaMuerte.moveTo(-1);
        }

        return(res);
    }
Example #9
0
        static void Main()
        {
            CLinkedList <String> MyList = new CLinkedList <String>();
            ListIter <String>    iter = new ListIter <String>(MyList);
            string choice, value;

            try
            {
                iter.InsertAfter("David");
                iter.InsertAfter("Mike");
                iter.InsertAfter("Raymond");
                iter.InsertAfter("Bernica");
                iter.InsertAfter("Jennifer");
                iter.InsertAfter("Donnie");
                iter.InsertAfter("Michael");
                iter.InsertAfter("Terrill");
                iter.InsertAfter("Mayo");
                iter.InsertAfter("Clayton");
                while (true)
                {
                    Console.WriteLine("(n) Move to next node");
                    Console.WriteLine("(g) Get value in current Node");
                    Console.WriteLine("(r) Reset Iterator");
                    Console.WriteLine("(s) Show complete list");
                    Console.WriteLine("(a) Insert after");
                    Console.WriteLine("(b) Insert before");
                    Console.WriteLine("(c) Clear the screen");
                    Console.WriteLine("(x) Exit");
                    Console.WriteLine();
                    Console.WriteLine("Enter your choice");

                    choice = Console.ReadLine();
                    choice = choice.ToLower();

                    char[] onechar = choice.ToCharArray();

                    switch (onechar[0])
                    {
                    case 'n':

                        if (!(MyList.IsEmpty()) && (!(iter.AtEnd())))
                        {
                            iter.NextLink();
                        }
                        else
                        {
                            Console.WriteLine("Can't move to next link");
                        }
                        break;

                    case 'g':

                        if (!(MyList.IsEmpty()))
                        {
                            Console.WriteLine("Element: " + iter.GetCurrent().Element);
                        }
                        else
                        {
                            Console.WriteLine("List is empty");
                        }
                        break;

                    case 'r':

                        iter.Reset();
                        break;

                    case 's':

                        if (!(MyList.IsEmpty()))
                        {
                            MyList.ShowList();
                        }
                        else
                        {
                            Console.WriteLine("List is empty");
                        }
                        break;

                    case 'a':

                        Console.WriteLine();
                        Console.Write("Enter value to insert:");
                        value = Console.ReadLine();
                        iter.InsertAfter(value);
                        break;

                    case 'b':

                        Console.WriteLine();
                        Console.Write("Enter value to insert:");
                        value = Console.ReadLine();
                        iter.InsertBefore(value);
                        break;

                    case 'c':
                        Console.Clear();
                        break;

                    case 'x':
                        Environment.Exit(0);
                        break;
                    }
                }
            }
            catch
            {
            }
        }