一、用栈实现队列
“在push数据的时候,只要数据放进输入栈就好,但在pop的时候,操作就复杂一些,输出栈如果为空,就把进栈数据全部导入进来(注意是全部导入),再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。”
Stack<Integer> stackIn = new Stack<>();
二、用队列实现栈
使用两个队列:保证q1的顺序是栈的顺序,借助q2存储之前的元素,实现顺序颠倒
若q1为空,直接加入元素;非空,则先将其元素存入q2,再q1中添加元素后,再顺序添加q2元素。
如:q1中放入1;q2中放入1,q1中添加2,q1中再放入q2弹出的1。
因为队列先进先出,只要将先出的元素存起来,清空队列后,再放入新元素,再加载之前的元素,即可实现后进先出。
使用一个队列:在一个队列中实现元素交换
使用单端队列:先放入元素,统计当前队列的size,遍历size-->1,出队列再尾部加入,实现倒序。
单端队列:Queue<Integer> que1 = new LinkedList<>();
队列方法:存入元素que1.offer(x);出队que1.poll();获得队头元素que1.peek();
双端队列:Deque<Integer> que = new ArrayDeque<>();
双端队列方法:addLast();pollFirst();peekFirst();