算法复制堆栈

Piy*_*yal 6 c algorithm stack data-structures

是否可以在不使用任何外部堆栈或阵列的情况下将堆栈复制到另一个堆栈中?

我知道它可以使用递归来完成,但是在提到的约束内是否有任何其他可能的解决方案?

das*_*ght 8

是的,这是可能的,但它会采取O(N^2).考虑堆栈S(源)和T(目标).

  1. 初始化count为零
  2. 将顶部元素弹出E堆栈S,然后将剩余数据推入堆栈T,将count项目保留在堆栈中S
  3. E之上S
  4. 复制元素从背部TS
  5. 增量 count
  6. 如果count不等于项目数S,请返回步骤1
  7. 流行元素S和推动T

步骤0到5反向堆叠S到位; 步骤6将其移动到T,颠倒顺序并生成原件的副本.但这是一个破坏性的副本,因为原始堆栈现在是空的.

  • @ColinD这应该很容易可视化:从堆栈中取出第一个项目,将其他所有项目移到另一个堆栈上,将第一个项目放在底部,然后将其他所有项目移回; 你得到底部第一个项目的原始堆栈.现在拿出#2之前的项目 - 它现在位于顶部 - 并重复该过程,在堆栈的底部留下一个项目; 把#2放在它上面,然后再把东西搬回来.继续,直到你颠倒堆栈.现在将其移动到目标将恢复原始顺序. (4认同)