前言:
此刻你们对“c语言实现顺序栈的基本操作”大约比较注重,姐妹们都需要分析一些“c语言实现顺序栈的基本操作”的相关内容。那么小编同时在网络上收集了一些对于“c语言实现顺序栈的基本操作””的相关资讯,希望看官们能喜欢,小伙伴们一起来学习一下吧!用顺序队列实现栈的逆置的方法是,先将栈中的所有元素依次出栈,并依次放入队列中,最后再将队列中的元素依次出队并压入栈中即可。
以下是一个使用两个顺序队列实现栈逆置的例子:
public class StackReverse<T> { private final Queue<T> queue1; private final Queue<T> queue2; public StackReverse() { queue1 = new LinkedList<>(); queue2 = new LinkedList<>(); } public void push(T item) { queue1.offer(item); } public T pop() { if (queue1.isEmpty()) { throw new NoSuchElementException("Stack is empty"); } while (queue1.size() > 1) { queue2.offer(queue1.poll()); } T item = queue1.poll(); Queue<T> temp = queue1; queue1 = queue2; queue2 = temp; return item; } public boolean isEmpty() { return queue1.isEmpty(); } public static void main(String[] args) { StackReverse<Integer> stack = new StackReverse<>(); stack.push(1); stack.push(2); stack.push(3); while (!stack.isEmpty()) { System.out.println(stack.pop()); } }}
在上面的例子中,当需要出栈时,我们将栈中的元素依次放入 queue2 中,直到栈中只剩下一个元素。然后我们交换 queue1 和 queue2,这样栈中的最后一个元素就成为了队列中的第一个元素,我们将其出队并返回即可。这种方法的时间复杂度为 O(n)。
另一种比较复杂的实现方式是使用一个顺序队列和一个栈,具体实现方式可以参考下面的代码:
public class StackReverse<T> { private final Queue<T> queue; private final Stack<T> stack; public StackReverse() { queue = new LinkedList<>(); stack = new Stack<>(); } public void push(T item) { queue.offer(item); } public T pop() { if (queue.isEmpty() && stack.isEmpty()) { throw new NoSuchElementException("Stack is empty"); } if (stack.isEmpty()) { while (!queue.isEmpty()) { stack.push(queue.poll()); } } return stack.pop(); } public boolean isEmpty() { return queue.isEmpty() && stack.isEmpty(); } public static void main(String[] args) { StackReverse<Integer> stack = new StackReverse<>(); stack.push(1); stack.push(2); stack.push(3); while (!stack.isEmpty()) { System.out.println(stack.pop()); } }}
在上面的例子中,当需要出栈时,我们先判断栈是否为空,如果为空,我们将队列中的所有元素依次弹出并压入栈中,然后再从栈中弹出一个元素并返回。这种方法的时间复杂度也为 O(n)。
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c语言实现顺序栈的基本操作