栈与队列的学习
理论基础(Java)
1、栈(stack)
可以理解为是一种装数据的容器,数据是先进后出
new Stack() (新建一个空栈)
push(入栈)
pop(将栈顶的元素出栈,并返回,简称出栈)
peek(获取栈顶元素)
isEmpty(判断栈是否为空)
size() (获取的栈的有效元素的个数)
2、队列(queue)
Java里队列就是一个接口,底层是通过链表来实现。其数据是先进先出。
offer(入队列,就是往里面存储队列元素)
poll(出队列,就是在队列里删除一个队列元素)
peek(获取队头元素)
size(队列里面有效的队列个数)
isEmpty(判断队列是否为空)
(
关于Java的栈和队列详细版本查看——https://blog.csdn.net/m0_51601105/article/details/121051198https://blog.csdn.net/m0_51601105/article/details/121051198)
力扣题目 232 用栈实现队列
直接用stack()来写,当然其下的pop,push,peek等方法也是可以的,这里有一个地方可以说:
在编码的过程中,不难发现,pop的写法和peek可以说是几乎一样,所以可以直接抽取重复的部分出来定义一个新的方法,在pop和peek里面调用就行。(也就是接口的思想)
力扣题目 225 用队列实现栈
class MyStack {
Queue<Integer> queue1;
Queue<Integer> queue2;
public MyStack() {
queue1 = new LinkedList<>();
queue2 = new LinkedList<>();
}
public void push(int x) {
queue2.offer(x);
while(!queue1.isEmpty()){
queue2.offer(queue1.poll());
}
//交换
Queue<Integer> queueTemp;
queueTemp = queue1;
queue1 = queue2;
queue2 = queueTemp;
}
public int pop() {
return queue1.poll();
}
public int top() {
return queue1.peek();
}
public boolean empty() {
return queue1.isEmpty();
}
}