请给我提供三个堆栈实现的算法并解释它们的工作原理。
1. 数组实现堆栈算法：使用一个数组来保存堆栈元素，并记录当前栈顶的位置。压入元素时，将元素添加到数组的末尾，并将栈顶位置+1；弹出元素时，将栈顶元素弹出并将栈顶位置-1。

2. 链表实现堆栈算法：使用一个单向链表来保存堆栈元素，并记录当前栈顶的位置。压入元素时，将元素添加到链表头部，并将栈顶位置+1；弹出元素时，将链表头部元素弹出并将栈顶位置-1。

3. 队列实现堆栈算法：使用两个队列来模拟堆栈行为，一个队列用于保存当前的堆栈元素，另一个队列用于辅助操作。压入元素时，将元素添加到当前队列末尾，并将辅助队列添加该元素到队头之前的所有元素，弹出元素时，将当前队列的元素逐一出队并添加到辅助队列中，直到当前队列只剩下一个元素，这个元素就是要弹出的栈顶元素。然后将两个队列交换，以便下次操作。