O(1)时间复杂度逆序栈和排序栈

两种操作都是递归实现,,汉诺塔思想。

1、逆序栈

void ReverseStack(Stack& stack){if (stack.Count == 0)return;object top = stack.Pop();ReverseStack(stack);if (stack.Count == 0){stack.Push(top);return;}object top2 = stack.Pop();ReverseStack(stack);//p1stack.Push(top);ReverseStack(stack);//p2stack.Push(top2);}举例:例如栈12 object top = stack.Pop();后栈变为 23 34 4ReverseStack(stack); 后站变为432object top2 = stack.Pop();后变为32(可以注意到1是栈顶元素,4是栈底元素)然后 ReverseStack(stack);//p1 变为23然后 stack.Push(top);变为123(这一步发现栈底元素4取出来了)下面就是,321最后是4321

2、排序栈,利用逆序栈的思想实现

void Sort(Stack& stack){if (stack.Count == 0)return;object top = stack.Pop();Sort(stack);if (stack.Count == 0){stack.Push(top);return;}object top2 = stack.Pop();if ((int)top > (int)top2){stack.Push(top);Sort(stack);stack.Push(top2);}else{stack.Push(top2);Sort(stack);stack.Push(top);}}

在乎的是沿途的风景以及看风景的心情,让心灵去旅行!

O(1)时间复杂度逆序栈和排序栈

相关文章:

你感兴趣的文章:

标签云: