2.栈
image.png
image.png
如果需要实现栈的话,那么我们就需要紧扣栈的概念,就是先进先出
下面贴出java实现栈的代码:
import java.util.Arrays;
/**
* 数组实现栈
* @param <T>
*/
class Mystack1<T> {
//实现栈的数组
private Object[] stack;
//数组大小
private int size;
Mystack1() {
stack = new Object[10];//初始容量为10
}
//判断是否为空
public boolean isEmpty() {
return size == 0;
}
//返回栈顶元素
public T peek() {
T t = null;
if (size > 0)
t = (T) stack[size - 1];
return t;
}
public void push(T t) {
expandCapacity(size + 1);
stack[size] = t;
size++;
}
//出栈
public T pop() {
T t = peek();
if (size > 0) {
stack[size - 1] = null;
size--;
}
return t;
}
//扩大容量
public void expandCapacity(int size) {
int len = stack.length;
if (size > len) {
size = size * 3 / 2 + 1;//每次扩大50%
stack = Arrays.copyOf(stack, size);
}
}
}
public class ArrayStack {
public static void main(String[] args) {
Mystack1<String> stack = new Mystack1<>();
System.out.println(stack.peek());
System.out.println(stack.isEmpty());
stack.push("java");
stack.push("is");
stack.push("beautiful");
stack.push("language");
System.out.println(stack.pop());
System.out.println(stack.isEmpty());
System.out.println(stack.peek());
}
}
使用数组来实现栈
3.队列
队列与栈的不同之处在于先进先出
image.png
算法题:烫手的山芋
image.png
image.png
image.png
在这个算法题中我们就可以用到队列的概念,使用先进先出的原则,最右边的节点作为队列头部,第一个作为尾部,那么当A把山芋传递出去时候,A就从队列出去,然后再添加到队列尾部,这个时候就是第二秒时候的情况了,然后依次类推,直到第七秒,就把A彻底从队列移除不再添加。
image.png