栈:只能一头插入,一头删除
先进后出 first in last out(FILO)
后进先出 last in first out(LIFO)
队列:在一头插入,另一头删除
先进先出 first in first out(FIFO)
双端队列 可以再任意两头进入
存int类型
Class stack{
//属性
//存数据的空间
Int[]array;
//当前栈内元素个数
Int top;//在栈里写作top,表示栈顶元素
//方法(公开)
构造方法
插入数据 (尾插) }
栈的应用:
1)回溯(迷宫问题)
2)后缀表达式解决优先级问题
//创建一个栈
//栈内元素删除
//返回栈顶元素
public void push(int val)【在入栈之前要判断站内空间是否已经满了,如果栈满,则需要扩容】
【在所有操作时,需要注意,栈满不能进栈,栈空不能删除,且无栈顶元素可以返回】
//top初始为0
import java.util.Arrays;
public class Stack {
private int[] array;
private int top;
public Stack(int defaultCapacity) {
array = new int[defaultCapacity];
top = 0;
}
public Stack() {
this(20);
}
public void push(int val) {
if (top == array.length) {
array = Arrays.copyOf(array, array.length * 2);
}
array[top++] = val;
}
public void pop() {
if (top <= 0) {
System.out.println("栈为空,无法删除");
return;
}
top--;
array[top] = 0; // 可加可不加,把所有空的位置保持为 0
}
public int top() {
if (top <= 0) {
System.out.println("栈为空,无法返回栈顶元素");
return -1;
}
return array[top - 1];
}
public int size() {
return top;
}
public boolean isEmpty() {
return top == 0;
}
}
//top初始为-1,相应参数都要改变
import java.util.Arrays;
public class Stack {
private int[] array;
private int top;
public Stack(int defaultCapacity) {
array = new int[defaultCapacity];
top = 0;
}
public Stack() {
this(20);
}
public void push(int val) {
if (top == array.length) {
array = Arrays.copyOf(array, array.length * 2);
}
array[top++] = val;
}
public void pop() {
if (top <= 0) {
System.out.println("栈为空,无法删除");
return;
}
top--;
array[top] = 0; // 可加可不加,把所有空的位置保持为 0
}
public int top() {
if (top <= 0) {
System.out.println("栈为空,无法返回栈顶元素");
return -1;
}
return array[top - 1];
}
public int size() {
return top;
}
public boolean isEmpty() {
return top == 0;
}
}