Example #1
0
        public MKStack <T> Clone()
        {
            Node <T>    _newHead  = CloneNode(head);
            MKStack <T> _newStack = new MKStack <T>();

            _newStack.head  = _newHead;
            _newStack.count = count;

            return(_newStack);
        }
Example #2
0
        public static bool CheckBracket(string str, char[] b_in, char[] b_out)
        {
            MKStack <char> _stack = new MKStack <char>();

            for (int i = 0; i < str.Length; i++)
            {
                // открывающую скобку просто добавим в стек
                if (BracketIn(str[i], b_in))
                {
                    _stack.Push(str[i]);
                }
                else
                {
                    int index = BracketOut(str[i], b_out);
                    if (index == -1)
                    {
                        continue;
                    }

                    // для закрывающей скобки проверим последнюю
                    // если совпадают - удалим из стека
                    if (_stack.Count == 0)
                    {
                        return(false);
                    }
                    if (_stack.Head() == b_in[index])
                    {
                        _stack.Pop();
                    }
                    else
                    {
                        return(false);
                    }
                }
            }

            foreach (var item in _stack)
            {
                Console.Write(item);
            }

            if (_stack.Count == 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #3
0
        // Перевод числа из десятичной в b-чную систему счисления
        private static void DtoB(int Dec, MKStack <int> stack, int b)
        {
            if (Dec > 1)
            {
                int a = Dec / b;
                int r = Dec % b;

                stack.Push(r);

                DtoB(a, stack, b);
            }
            else
            {
                stack.Push(Dec);
            }
        }
Example #4
0
        /* Реализовать перевод из десятичной в двоичную систему счисления
         * с использованием стека.*/
        private static void Task1()
        {
            Console.ForegroundColor = ConsoleColor.Green;
            int dec = 50;
            int bin = 2;

            MKStack <int> myStack = new MKStack <int>();

            DtoB(dec, myStack, bin);

            Console.WriteLine($"{dec} по основанию {bin}:");
            foreach (var item in myStack)
            {
                Console.Write(item);
            }
        }
Example #5
0
        /* Добавить в программу «реализация стека на основе односвязного
         * списка» проверку на выделение памяти. Если память не выделяется,
         * то выводится соответствующее сообщение. Постарайтесь создать ситуацию,
         * когда память не будет выделяться (добавлением большого количества данных).*/
        private static void Task2()
        {
            MKStack <int> _stack = new MKStack <int>();

            while (true)
            {
                try
                {
                    _stack.Push(1);
                    _stack.DisplaySizeOf();
                }
                catch (OutOfMemoryException ex)
                {
                    Console.WriteLine($"Переполнение !!! {ex}");
                    break;
                }
            }
        }
Example #6
0
        /* Создать функцию, копирующую односвязный список (то есть создает в
         * памяти копию односвязного списка, не удаляя первый список).*/
        private static void Task4()
        {
            // клонирование односвязного списка на примере стека

            MKStack <int> original = new MKStack <int>();

            original.Push(0);
            original.Push(1);
            original.Push(2);
            original.Push(3);

            Console.WriteLine("Оригинал: ");
            foreach (int item in original)
            {
                Console.Write($"{item} ");
            }

            MKStack <int> stackNew = original.Clone();

            Console.WriteLine("\nКопия: ");
            foreach (int item in stackNew)
            {
                Console.Write($"{item} ");
            }

            Console.WriteLine("\nНекоторые манипуляции... ");
            original.Pop();
            original.Push(4);
            stackNew.Push(5);

            Console.WriteLine("Оригинал: ");
            foreach (int item in original)
            {
                Console.Write($"{item} ");
            }
            Console.WriteLine("\nКопия: ");

            foreach (int item in stackNew)
            {
                Console.Write($"{item} ");
            }
        }