一,实现方法
1.具体思路:
1.准备两个队列AB
2.A用来执行入队列(每次入队列时只要放入A即可)
3.出栈操作时,在A中元素保留一个的情况下将A中元素依次入队列B,最后直接让A中的剩下的那一个元素出队列即可,执行完,交换AB队列(方便下次出栈)
4,取栈顶元素操作时,和出栈操作一样,不过访问完A的唯一元素后,再存放到B(保持数据的完整性),最后交换AB即可
2,图示
二,代码实现
public class MyStackByQueue {Queue<Integer> A = new LinkedList<>();Queue<Integer> B = new LinkedList<>();public void push(int val){ //入栈时将数据放入队列AA.offer(val);}public Integer pop(){ //出栈if(isEmpty()){ //如果队列为空即返回nullreturn null;}while(A.size() > 1){ //当队列A的元素个数大于一,就将元素挨个出队列A放入队列Integer temp = A.poll();B.offer(temp);}//当循环结束时,栈队列A就剩一个元素int rec = A.poll(); //保存这个元素,并出队列swap(); //交换AB队列,便于下次操作(无论是入栈出栈取栈顶元素都保证了是A中元素往B中倒腾)return rec; //返回出栈元素,}public void swap() { //交换AB队列Queue<Integer> temp = A;A = B;B = temp;}public Integer peek(){ //取栈顶元素if(isEmpty()){ //如果队列为空即返回nullreturn null;}while(A.size() > 1){ //当队列A的元素个数大于一,就将元素挨个出队列A放入队列Integer temp = A.poll();B.offer(temp);}//当循环结束时,栈队列A就剩一个元素int rec = A.poll(); //保存这个元素,并出队列B.offer(rec); //将这个元素再放入队列B(保持栈的元素完整)swap(); //交换AB队列,便于下次操作(无论是入栈出栈取栈顶元素都保证了是A中元素往B中倒腾)return rec; //返回出栈元素,}public boolean isEmpty(){ //判断栈是否为空return A.isEmpty() ; //只要判断A队列是否为空}