Example #1
0
        static void Main(string[] args)
        {
            WriteLine();
            WriteLine("Recursive Singly Linked List");
            WriteLine();
            WriteLine("Time & Space Complexity - Worst Case");
            WriteLine();
            WriteLine("Time Complexity");
            WriteLine();
            WriteLine("Search - O(n)");
            WriteLine();
            WriteLine("Insert");
            WriteLine("At Begining/ Head - O(1)");
            WriteLine("At End/ Tail - O(1)");
            WriteLine();
            WriteLine("Remove");
            WriteLine("At Begining/ Head - O(1)");
            WriteLine("At End/ Tail - O(n)");
            WriteLine("At A Position/ in between - O(n)");

            WriteLine();

            WriteLine("Space Complexity - O(n) : for using a call stack for recursive calls.");



            SinglyLinkedList node = new SinglyLinkedList();

            node.AddToEnd(10);
            node.AddToEnd(20);
            node.AddToEnd(30);

            node.AddToBegining(1);
            node.AddToBegining(2);

            node.AddToEnd(40);

            node.Print();

            int deleteNode = 2;

            node.deleteNode(deleteNode);

            WriteLine();
            WriteLine($"After deleting Node {deleteNode}, LinkedList will be -");
            WriteLine();

            node.Print();
        }
Example #2
0
        /// <summary>
        /// Exercícios de lista encadeada:
        /// (a) Recebe um número inteiro e o insere no fim da lista
        /// (b) Retira o primeiro elemento da lista e o retorna
        /// (c) Recebe um valor inteiro (x) que é um elemento da lista
        /// e o uma chave. O método deve inserir o valor da chave após
        /// o elemento x. Verifique se o elemento passado como parâmetro
        /// , x, pertence à lista. Caso nãoo exista, informe ao usuário.
        /// (d) retira todos os elementos cujo campo value é um número
        /// ímpar.
        /// (e) Pesquisa por um determinado elemento da lista. Se o elemento
        /// procurado não existir, informe ao usuário e retorne -1. Caso
        /// contrário, retorne o valor do elemento.
        /// (f) Procura e retorna o menor elemento da lista.
        /// (g) O método recebe uma posição da lista, índice e retira o elemento
        /// que corresponde à mesma. Seu método deve verificar se o índice é
        /// válido, sem fazer contagem da quantidade de elementos da lista. Retorne
        /// o elemento retirado caso o índice seja válido. Caso contrário retorne -1.
        /// Considere o nó sentinela possuindo o índice 0.
        /// (h) Todos os métodos devem ser implementados e testados.
        /// </summary>
        static void Main(string[] args)
        {
            SinglyLinkedList list = new SinglyLinkedList();

            list.Insert(1);
            list.Insert(2);
            list.Insert(3);
            list.Insert(4);
            list.Insert(5);
            list.Insert(6);
            list.Insert(7);
            list.Insert(8);

            list.Print();

            Console.WriteLine();

            // (a).
            list.InsertAfterAll(912);
            Console.WriteLine("(a).");
            list.Print();
            Console.WriteLine();

            // (b).
            Console.WriteLine("(b). = " + list.FindRemoveAndReturn(3));
            list.Print();
            Console.WriteLine();

            // (c)
            Console.WriteLine("(c).");
            list.InsertAfter(555, 4);
            list.Print();
            Console.WriteLine();

            // (d).
            Console.WriteLine("(d).");
            list.RemoveOdds();
            list.Print();
            Console.WriteLine();

            // (e).
            Console.WriteLine("(e). = " + list.SearchValue(2));
            list.Print();
            Console.WriteLine();

            // (f).
            Console.WriteLine("(f). = " + list.Min());
            list.Print();
            Console.WriteLine();

            // (g).
            Console.WriteLine("(g).");
            list.RemoveAt(2);
            list.Print();
            Console.WriteLine();
        }
Example #3
0
        /// <summary>
        /// Exercícios de lista encadeada:
        /// (a) Recebe um número inteiro e o insere no fim da lista
        /// (b) Retira o primeiro elemento da lista e o retorna
        /// (c) Recebe um valor inteiro (x) que é um elemento da lista
        /// e o uma chave. O método deve inserir o valor da chave após
        /// o elemento x. Verifique se o elemento passado como parâmetro
        /// , x, pertence à lista. Caso nãoo exista, informe ao usuário.
        /// (d) retira todos os elementos cujo campo value é um número
        /// ímpar.
        /// (e) Pesquisa por um determinado elemento da lista. Se o elemento
        /// procurado não existir, informe ao usuário e retorne -1. Caso 
        /// contrário, retorne o valor do elemento.
        /// (f) Procura e retorna o menor elemento da lista.
        /// (g) O método recebe uma posição da lista, índice e retira o elemento
        /// que corresponde à mesma. Seu método deve verificar se o índice é
        /// válido, sem fazer contagem da quantidade de elementos da lista. Retorne
        /// o elemento retirado caso o índice seja válido. Caso contrário retorne -1.
        /// Considere o nó sentinela possuindo o índice 0.
        /// (h) Todos os métodos devem ser implementados e testados.
        /// </summary>
        static void Main(string[] args)
        {
            SinglyLinkedList list = new SinglyLinkedList();
            list.Insert(1);
            list.Insert(2);
            list.Insert(3);
            list.Insert(4);
            list.Insert(5);
            list.Insert(6);
            list.Insert(7);
            list.Insert(8);

            list.Print();

            Console.WriteLine();

            // (a).
            list.InsertAfterAll(912);
            Console.WriteLine("(a).");
            list.Print();
            Console.WriteLine();

            // (b).
            Console.WriteLine("(b). = " + list.FindRemoveAndReturn(3));
            list.Print();
            Console.WriteLine();

            // (c)
            Console.WriteLine("(c).");
            list.InsertAfter(555, 4);
            list.Print();
            Console.WriteLine();

            // (d).
            Console.WriteLine("(d).");
            list.RemoveOdds();
            list.Print();
            Console.WriteLine();

            // (e).
            Console.WriteLine("(e). = " + list.SearchValue(2));
            list.Print();
            Console.WriteLine();

            // (f).
            Console.WriteLine("(f). = " + list.Min());
            list.Print();
            Console.WriteLine();

            // (g).
            Console.WriteLine("(g).");
            list.RemoveAt(2);
            list.Print();
            Console.WriteLine();
        }
Example #4
0
        static void Main(string[] args)
        {
            #region проверка FindByIndex

            // var line = Console.ReadLine().Split();
            //
            // var list = new SinglyLinkedList();
            // foreach (var item in line)
            // {
            //     list.PushBack(int.Parse(item));
            // }
            // int beforeLength = line.Length;
            // var beforePrinted = list.Print();
            //
            // var index = int.Parse(Console.ReadLine());
            // var node = list.FindByIndex(index);
            // Console.WriteLine(node?.Value);
            //
            // int afterRemoveLength = list.GetCount();
            // if (beforeLength != afterRemoveLength)
            //     throw new Exception("Метод \"FindByIndex\" изменяет кол-во элементов");
            //
            // var afterPrinted = list.Print();
            // if (beforePrinted != afterPrinted)
            //     throw new Exception("Метод \"FindByIndex\" изменяет элементы массива");

            #endregion

            #region проверка FindLast

            // var line = Console.ReadLine().Split(new []{' '}, StringSplitOptions.RemoveEmptyEntries);
            //
            // var list = new SinglyLinkedList();
            // foreach (var item in line)
            // {
            //     list.PushBack(int.Parse(item));
            // }
            //
            // int beforeLength = line.Length;
            // var beforePrinted = list.Print();
            //
            // var key = int.Parse(Console.ReadLine());
            // var node = list.FindLast(key);
            // Console.WriteLine(node?.Value);
            //
            // Console.WriteLine(node?.Next?.Value);
            //
            // int afterRemoveLength = list.GetCount();
            // if (beforeLength != afterRemoveLength)
            //     throw new Exception("Метод \"FindLast\" изменяет кол-во элементов");
            //
            // var afterPrinted = list.Print();
            // if (beforePrinted != afterPrinted)
            //     throw new Exception("Метод \"FindLast\" изменяет элементы массива");

            #endregion

            #region проверка PushBackRange

            // var line = Console.ReadLine().Split();
            // var line2 = Console.ReadLine().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            // var array = new int[line2.Length];
            // for (int i = 0; i < line2.Length; i++)
            // {
            //     array[i] = int.Parse(line2[i]);
            // }
            // int expectedLength = line.Length + line2.Length;
            // var list = new SinglyLinkedList();
            // foreach (var item in line)
            // {
            //     list.PushBack(int.Parse(item));
            // }
            // list.PushBackRange(array);
            //
            // if (list.GetCount() != expectedLength)
            //     throw new Exception("Кол-во элементво в массиве должна быть равна сумме длин двух массивов.");
            //
            // Console.WriteLine(list.Print());

            #endregion

            #region проверка AddBefore

            // var line = Console.ReadLine().Split();
            // var list = new SinglyLinkedList();
            // for (int i = 0; i < line.Length; i++)
            // {
            //     list.PushBack(int.Parse(line[i]));
            // }
            // int expectedLength = line.Length + 1;
            //
            // int key = int.Parse(Console.ReadLine());
            // var node = list.Find(key);
            //
            // int item = int.Parse(Console.ReadLine());
            //
            // list.AddBefore(node, item);
            //
            // if (list.GetCount() != expectedLength)
            //     throw new Exception("Кол-во элементво в списке после добавления должна быть на 1 больше, чем до добавления.");
            //
            // Console.WriteLine(list.Print());

            #endregion

            #region проверка Remove

            // var line = Console.ReadLine().Split();
            // int beforeRemoveLength = line.Length;
            // var list = new SinglyLinkedList();
            // foreach (var item in line)
            // {
            //     list.PushBack(int.Parse(item));
            // }
            // var itemToRemove = int.Parse(Console.ReadLine());
            // var isRemove = list.Remove(itemToRemove);
            // Console.WriteLine(list.Print());
            //
            // int afterRemoveLength = list.GetCount();
            //
            // if (beforeRemoveLength == afterRemoveLength && isRemove)
            //     throw new Exception("Метод \"Remove\" возвращает неправильное значение");
            //
            // if (beforeRemoveLength != afterRemoveLength && !isRemove)
            //     throw new Exception("Метод \"Remove\" возвращает неправильное значение");

            #endregion

            #region проверка RemoveLast

            // var line = Console.ReadLine().Split();
            // int beforeRemoveLength = line.Length;
            // var list = new SinglyLinkedList();
            // foreach (var item in line)
            // {
            //     list.PushBack(int.Parse(item));
            // }
            // var itemToRemove = int.Parse(Console.ReadLine());
            // var isRemove = list.RemoveLast(itemToRemove);
            // Console.WriteLine(list.Print());
            //
            // int afterRemoveLength = list.GetCount();
            //
            // if (beforeRemoveLength == afterRemoveLength && isRemove)
            //     throw new Exception("Метод \"RemoveLast\" возвращает неправильное значение");
            //
            // if (beforeRemoveLength != afterRemoveLength && !isRemove)
            //     throw new Exception("Метод \"RemoveLast\" возвращает неправильное значение");

            #endregion
            #region проверка RemoveLast

            var line = Console.ReadLine().Split();
            int beforeRemoveLength = line.Length;
            var list = new SinglyLinkedList();
            foreach (var item in line)
            {
                list.PushBack(int.Parse(item));
            }
            var itemToRemove          = int.Parse(Console.ReadLine());
            var remodedElementsCounts = list.RemoveAll(itemToRemove);
            Console.WriteLine(list.Print());

            int afterRemoveLength = list.GetCount();

            if (beforeRemoveLength != afterRemoveLength + remodedElementsCounts)
            {
                throw new Exception("Метод \"RemoveAll\" возвращает неправильное значение");
            }

            #endregion
        }
Example #5
0
        static void Main(string[] args)
        {
            SinglyLinkedList test = new SinglyLinkedList();

            Console.WriteLine("Test: ");
            test.AddFirst(10);
            test.AddFirst(20);
            test.AddFirst(30);
            test.AddFirst(40);
            Console.WriteLine("Singly Linked List After: AddFirst(10), AddFirst(20), AddFirst(30), AddFirst(40)");
            test.Print();
            Console.WriteLine();
            test.AddLast(50);
            test.AddLast(60);
            Console.WriteLine("Singly Linked List After: AddLast(50), AddLast(60)");
            test.Print();
            Console.WriteLine();
            test.Append(70);
            Console.WriteLine("Singly Linked List After: Append(70)");
            test.Print();
            Console.WriteLine();
            test.DeleteFirst();
            test.DeleteFirst();
            Console.WriteLine("Singly Linked List After: DeleteFirst() Twice");
            test.Print();
            Console.WriteLine();
            test.DeleteLast();
            Console.WriteLine("Singly Linked List After: DeleteLast()");
            test.Print();
            Console.WriteLine();
            test.Insert(4, 3);
            test.Insert(5, 1);
            Console.WriteLine("Singly Linked List After: Insert(4,3), Insert(5,1)");
            test.Print();
            Console.WriteLine();
            test.Delete(2);
            test.Delete(3);
            Console.WriteLine("Singly Linked List After: Delete(2), Delete(3)");
            test.Print();
            Console.WriteLine();
            Console.WriteLine();

            Console.WriteLine("Error Test: ");
            Console.WriteLine("No Values Have Been Inserted Into Linked List");
            Console.WriteLine();

            SinglyLinkedList error = new SinglyLinkedList();

            Console.WriteLine("Singly Linked List Error Message After: Print()");
            Console.WriteLine();

            error.Print();

            Console.WriteLine();
            Console.WriteLine("Singly Linked List Error Message After: DeleteFirst()");
            Console.WriteLine();

            error.DeleteFirst();

            Console.WriteLine();
            Console.WriteLine("Singly Linked List Error Message After: DeleteLast()");
            Console.WriteLine();

            error.DeleteLast();

            Console.WriteLine();
            Console.WriteLine("Singly Linked List After Insert(27, 0) With No Values In List");
            Console.WriteLine();
            Console.WriteLine("AddFirst() Will Be Called Instead: ");
            Console.WriteLine();

            error.Insert(27, 0);
            error.Print();
            Console.WriteLine();

            Console.WriteLine();
            Console.WriteLine("Singly Linked List Error Message After Delete() Called Twice");
            Console.WriteLine();

            error.Delete(0);
            error.Print();

            error.Delete(0);
        }