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); }
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()); }
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); }
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); }
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(); }
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"); } }
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"); }
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); }
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 { } }