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; } }
// используется во время отладки так что даже не считаю 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); }
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 }