//This method applies DFS algorithm to check if adjacent nodes are depended or not
            private void StronglyConnect(Vertex v)
            {
                v.Index   = _Index;
                v.Lowlink = _Index;

                _Index++;
                _Stack.push(v);

                foreach (Vertex w in v.Dependencies)
                {
                    if (w.Index < 0)
                    {
                        StronglyConnect(w);
                        v.Lowlink = Math.Min(v.Lowlink, w.Lowlink);
                    }
                    else if (_Stack.Contains(w))
                    {
                        v.Lowlink = Math.Min(v.Lowlink, w.Index);
                    }
                }

                if (v.Lowlink == v.Index)
                {
                    List <Vertex> cycle = new List <Vertex>();
                    Vertex        w;

                    do
                    {
                        w = _Stack.pop();
                        cycle.Add(w);
                    } while (v != w);

                    _StronglyConnectedComponents.Add(cycle);
                }
            }
Пример #2
0
        public void ContainsExceptionTest(string contains, Type expectedEx)
        {
            var stack = new MyStack <string>();

            void Result() => stack.Contains(contains);

            Assert.Throws(expectedEx, Result);
        }
Пример #3
0
 static void Main(string[] args)
 {
     MyStack<int> stack = new MyStack<int>();
     stack.Push(9);
     stack.Push(10);
     stack.Pop();
     Console.WriteLine(stack.Contains(10));
 }
Пример #4
0
        public void TestContains()
        {
            var stack = new MyStack <int>();

            for (int i = 0; i < 10; i++)
            {
                stack.Push(i);
            }

            Assert.AreEqual(10, stack.Count);

            for (int i = 0; i < 10; i++)
            {
                Assert.AreEqual(10 - i, stack.Count);
                Assert.IsTrue(stack.Contains(9 - i));
                stack.Pop();
                Assert.IsFalse(stack.Contains(9 - i));
                Assert.AreEqual(9 - i, stack.Count);
            }
        }
Пример #5
0
        public void PushInStack46Elemets_StackContains_ContainsReturnFalse()
        {
            var stack = new MyStack <int>();

            for (int i = 0; i < 10; i++)
            {
                stack.Push(i);
            }

            Assert.AreEqual(10, stack.Count);

            for (int i = 0; i < 10; i++)
            {
                Assert.AreEqual(10 - i, stack.Count);
                Assert.IsTrue(stack.Contains(9 - i));
                stack.Pop();
                Assert.IsFalse(stack.Contains(9 - i));
                Assert.AreEqual(9 - i, stack.Count);
            }
        }
Пример #6
0
        static void Main()
        {
            MyStack<int> stack = new MyStack<int>();

            // push some elements to test if work correctly
            stack.Push(5);
            stack.Push(10);
            stack.Push(15);
            stack.Push(80);
            stack.Push(-95);

            // test foreach
            foreach (var item in stack)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine();

            Console.WriteLine(stack.Count);
            Console.WriteLine(stack.Capacity);
            Console.WriteLine();

            // test pop
            Console.WriteLine(stack.Pop());
            Console.WriteLine(stack.Pop());
            Console.WriteLine();

            // test contains method
            Console.WriteLine(stack.Contains(-95));
            Console.WriteLine(stack.Contains(10));
            Console.WriteLine();

            // test if count and capacity work correctly after pop elements
            Console.WriteLine(stack.Count);
            Console.WriteLine(stack.Capacity);

            // test toArray and toString
            var stackAsArray = stack.ToArray();
            Console.WriteLine(string.Join(", ", stackAsArray));
            Console.WriteLine(stack.ToString());
        }
Пример #7
0
        public void ContainsTest(List <int> source, List <int> contains, List <bool> expectedResult)
        {
            var stack = new MyStack <int>();

            foreach (var item in source)
            {
                stack.Push(item);
            }

            var result = contains.Select(item => stack.Contains(item)).ToList();

            Assert.That(result, Is.EqualTo(expectedResult));
        }
        public void Removes_Last_Item()
        {
            var stack = new MyStack <int> {
                1, 2, 3, 4, 5
            };
            int expectedLength = 4;

            int item         = stack.GetAndRemove();
            int actualLength = stack.Count;

            Assert.IsFalse(stack.Contains(item));
            Assert.AreEqual(expectedLength, actualLength);
        }
Пример #9
0
        public void StackContainsTest()
        {
            var stack = new MyStack <int>();
            var rand  = new Random();
            var list  = new List <int>();

            for (int i = 0; i < 46; i++)
            {
                var last = rand.Next(0, 1000);
                stack.Push(last);
                list.Add(last);
            }

            list.Sort();

            foreach (var obj in list)
            {
                Assert.IsTrue(stack.Contains(obj));
            }
        }
Пример #10
0
        static void Main(string[] args)
        {
            var myStack = new MyStack <int>();

            myStack.Push(1);
            myStack.Push(2);
            myStack.Push(3);
            myStack.Push(4);
            Console.WriteLine("First:" + myStack.Peek());
            Console.WriteLine("Count:" + myStack.Count());
            Console.WriteLine("First:" + myStack.Pop());
            Console.WriteLine("Second:" + myStack.Pop());
            Console.WriteLine("Count:" + myStack.Count());
            myStack.Push(3);
            Console.WriteLine(myStack.Contains(5));
            Console.WriteLine("Count:" + myStack.Count());
            Console.WriteLine("First:" + myStack.Peek());
            myStack.Clear();
            Console.ReadKey();
        }
Пример #11
0
        static void Main(string[] args)
        {
            MyStack <double> ms = new MyStack <double>();

            ms.Push(1);
            ms.Push(2);
            ms.Push(3);
            ms.Push(4);
            ms.Push(5);
            ms.Push(6);
            try
            {
                Console.WriteLine(ms.Pop());
                Console.WriteLine(ms.Peek());
                Console.WriteLine(ms.Contains(6));
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Console.WriteLine(ms.Print());
            Console.WriteLine(ms.Count);
            Console.ReadLine();
        }
Пример #12
0
        static void MainMenu()
        {
            //Флаг правильности ввода
            bool ok = true;
            //Флаг завершения работы
            bool Finish = false;

            // Стек элементов иерархии
            MyStack <Challenge> ExamsStack = new MyStack <Challenge>();
            // Вспомогательная переменная для заполнения стека
            Random    rnd          = new Random();
            Challenge ElementToAdd = null;

            // Первоначальное заполнение стека
            for (ushort i = 0; i < 1000; i++)
            {
                switch (rnd.Next(4))
                {
                case 0:
                    ElementToAdd = new Challenge();
                    break;

                case 1:
                    ElementToAdd = new Test();
                    break;

                case 2:
                    ElementToAdd = new Exam();
                    break;

                case 3:
                    ElementToAdd = new GraduateExam();
                    break;
                }

                ExamsStack.Push(ElementToAdd);
            }

            Console.WriteLine("Успешно создан новый стек емкостью {0} с количеством элементов {1}.",
                              ExamsStack.Capacity, ExamsStack.Count);

            do
            {
                do
                {
                    Console.Clear();
                    //Вывод меню
                    Console.WriteLine();
                    Console.WriteLine("1 - Создание нового стека");
                    Console.WriteLine("2 - Печать стека");
                    Console.WriteLine("3 - Удалить элемент");
                    Console.WriteLine("4 - Добавить новый элемент");
                    Console.WriteLine("5 - Перевод в массив с помощью метода ToArray");
                    Console.WriteLine("6 - Перевод в массив с помощью метода CopyTo");
                    Console.WriteLine("7 - Клонирование коллекции");
                    Console.WriteLine("8 - Поиск элемента");
                    Console.WriteLine("9 - Выход");

                    //Выбор пункта меню и вызов соответствующих функций
                    int ChosenOption = Int32.Parse(Console.ReadLine());
                    Console.WriteLine();

                    switch (ChosenOption)
                    {
                    // Создание новой таблицы
                    case 1:

                        ExamsStack.Clear();
                        // Ввод количества элементов
                        int NumberToAdd = InputOutput.InputNumber(10, 1000);
                        ExamsStack = new MyStack <Challenge>(NumberToAdd);

                        for (ushort i = 0; i < NumberToAdd; i++)
                        {
                            switch (rnd.Next(4))
                            {
                            case 0:
                                ElementToAdd = new Challenge();
                                break;

                            case 1:
                                ElementToAdd = new Test();
                                break;

                            case 2:
                                ElementToAdd = new Exam();
                                break;

                            case 3:
                                ElementToAdd = new GraduateExam();
                                break;
                            }

                            ExamsStack.Push(ElementToAdd);
                        }

                        Console.WriteLine("Успешно создан новый стек емкостью {0} с количеством элементов {1}.",
                                          ExamsStack.Capacity, ExamsStack.Count);
                        ok = true;
                        break;

                    // Печать таблицы
                    case 2:
                        foreach (Challenge Element in ExamsStack)
                        {
                            Element.Show();
                        }
                        ok = true;
                        break;

                    // Удаление элемента
                    case 3:
                        ExamsStack.Pop();
                        Console.WriteLine("Последний элемент стека удален.");
                        ok = true;
                        break;

                    // Создание элемента
                    case 4:
                        // Тип создаваемого объекта
                        int Option = 0;
                        ChooseTypeMenu(out Option);

                        switch (Option)
                        {
                        case 1:
                            Console.Write("Введите ФИО студента: ");
                            string Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            ushort TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            ushort TasksDone = UInt16.Parse(Console.ReadLine());

                            ExamsStack.Push(new Challenge(Name, TasksTotal, TasksDone));
                            break;

                        case 2:
                            Console.Write("Введите ФИО студента: ");
                            Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());

                            ExamsStack.Push(new Test(Name, TasksTotal, TasksDone));
                            break;

                        case 3:
                            Console.Write("Введите ФИО студента: ");
                            Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите предмет, по которому был экзамен: ");
                            string Subject = Console.ReadLine();

                            ExamsStack.Push(new Exam(Name, Subject, TasksTotal, TasksDone));
                            break;

                        case 4:
                            Console.Write("Введите ФИО студента: ");
                            Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите предмет, по которому был экзамен: ");
                            Subject = Console.ReadLine();
                            Console.Write("Введите учебное заведение, откуда выпускается студент: ");
                            string Organisation = Console.ReadLine();

                            ExamsStack.Push(new GraduateExam(Name, Subject, Organisation, TasksTotal, TasksDone));
                            break;
                        }

                        Console.WriteLine("Текущая емкость коллекции равна {0}, количество элементов равно {1}.", ExamsStack.Capacity, ExamsStack.Count);
                        ok = true;
                        break;

                    // Перевод в массив с помощью метода ToArray
                    case 5:
                        Challenge[] ExamsArray = ExamsStack.ToArray();
                        foreach (Challenge Element in ExamsArray)
                        {
                            Element.Show();
                        }
                        ok = true;
                        break;

                    // Перевод в массив с помощью метода CopyTo
                    case 6:
                        ExamsArray = new Challenge[ExamsStack.Count];
                        ExamsStack.CopyTo(ExamsArray, 0);
                        foreach (Challenge Element in ExamsArray)
                        {
                            Element.Show();
                        }
                        ok = true;
                        break;

                    // Клонирование стека
                    case 7:
                        MyStack <Challenge> ClonedStack = ExamsStack.Clone() as MyStack <Challenge>;
                        foreach (Challenge Element in ClonedStack)
                        {
                            Element.Show();
                        }

                        ok = true;
                        break;

                    // Поиск элемента по ключу
                    case 8:
                        Option = 0;
                        ChooseTypeMenu(out Option);

                        switch (Option)
                        {
                        case 1:
                            Console.Write("Введите ФИО студента: ");
                            string Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            ushort TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            ushort TasksDone = UInt16.Parse(Console.ReadLine());

                            bool contains = ExamsStack.Contains(new Challenge(Name, TasksTotal, TasksDone));
                            Console.WriteLine("В коллекции присутствует указанный элемент: {0}",
                                              ExamsStack.Contains(new Challenge(Name, TasksTotal, TasksDone)));
                            break;

                        case 2:
                            Console.Write("Введите ФИО студента: ");
                            Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());

                            Console.WriteLine("В коллекции присутствует указанный элемент: {0}",
                                              ExamsStack.Contains(new Test(Name, TasksTotal, TasksDone)));
                            break;

                        case 3:
                            Console.Write("Введите ФИО студента: ");
                            Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите предмет, по которому был экзамен: ");
                            string Subject = Console.ReadLine();

                            Console.WriteLine("В коллекции присутствует указанный элемент: {0}",
                                              ExamsStack.Contains(new Exam(Name, Subject, TasksTotal, TasksDone)));
                            break;

                        case 4:
                            Console.Write("Введите ФИО студента: ");
                            Name = Console.ReadLine();
                            Console.Write("Введите общее количество задач: ");
                            TasksTotal = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите количество решенных задач: ");
                            TasksDone = UInt16.Parse(Console.ReadLine());
                            Console.Write("Введите предмет, по которому был экзамен: ");
                            Subject = Console.ReadLine();
                            Console.Write("Введите учебное заведение, откуда выпускается студент: ");
                            string Organisation = Console.ReadLine();

                            Console.WriteLine("В коллекции присутствует указанный элемент: {0}",
                                              ExamsStack.Contains(new GraduateExam(Name, Subject, Organisation, TasksTotal, TasksDone)));
                            break;
                        }

                        ok = true;
                        break;

                    case 9:
                        Finish = ok = true;
                        break;

                    default:
                        ok = false;
                        break;
                    }
                } while (!ok);

                if (!Finish && ok)
                {
                    Console.WriteLine("Нажмите любую клавишу...");
                    Console.ReadKey();
                }
            } while (!Finish);
        }
Пример #13
0
 public void Item_Exists()
 {
     Assert.IsTrue(stack.Contains(3));
 }