Beispiel #1
0
        public void Swap(int i, int j)                          // = 52n + 49
        {
            if (i > j)                                          // = 5
            {
                N_op += 5;
                int tmp = i;                                    // 2
                i = j;                                          // 1
                j = tmp;                                        // 1
            }

            MyStack tmp_stack_1 = new MyStack(GetMaxSize());    // 11
            MyStack tmp_stack_2 = new MyStack(GetMaxSize());    // 11

            N_op += 4;

            while (TopPointer != j + 1)                          // 13n
            {
                tmp_stack_1.Add(Pop());                          // 10
                N_op += 4;
            }
            int value_1 = Pop();                                // 8

            N_op += 2;

            while (TopPointer != i + 1)                         // 13n
            {
                tmp_stack_2.Add(Pop());                         // 10
                N_op += 4;
            }
            int value_2 = Pop();                                // 8

            N_op += 2;

            Add(value_1);                                       // 3
            N_op += 1;

            while (!tmp_stack_2.IsEmpty())                      // 13n
            {
                Add(tmp_stack_2.Pop());                         // 10
                N_op += 4;
            }
            Add(value_2);                                       // 3
            N_op += 1;

            while (!tmp_stack_1.IsEmpty())                      // 13n
            {
                Add(tmp_stack_1.Pop());                         // 10
                N_op += 4;
            }
        }
Beispiel #2
0
        // используется во время отладки так что даже не считаю
        public MyStack GetCopy()
        {
            MyStack tmp_stack = new MyStack(GetMaxSize());

            while (!IsEmpty())
            {
                tmp_stack.Add(Pop());
            }

            MyStack for_return = new MyStack(GetMaxSize());     // 11

            while (!tmp_stack.IsEmpty())
            {
                for_return.Add(tmp_stack.Peek());
                Add(tmp_stack.Pop());
            }
            return(for_return);
        }
Beispiel #3
0
        public int GetElement(int pos)                          // 26n + 20 = 11 + 13n + 8 + 13n + 1
        {
            MyStack tmp_stack = new MyStack(GetTopPointer());   // 11 = 10 + 1

            N_op += 2;

            while (TopPointer != pos + 1)                       // 13n = n раз, где n размер стека, так что (3(проверка) + 10(внутр)) * n
            {
                N_op += 4;
                tmp_stack.Add(Pop());                           // 10
            }
            int element = Peek();                               // 8 = 7 + 1

            N_op += 2;

            while (!tmp_stack.IsEmpty())                        // 13n
            {
                N_op += 4;
                Add(tmp_stack.Pop());                               // 3(add) + 7(pop) = 10
            }
            N_op += 1;
            return(element);                                     // 1
        }