栈和队列是一种特殊的线性表
LinkedList add/remove
push/pop
addFirst/addLast/peekFirst/peekLast
stack的peek方法是返回栈顶元素但不移除它
但stack的pop方法是会移除的
pop 删除数据 弹栈
push 放入数据 压栈
栈 先进后出 (First In Last Out FILO)
后进先出 (Last In First Out LIFO)
栈顶 top 栈底 bottom
栈的操作: 1、初始化 2、压栈/弹栈 3、查看当前栈顶元素 4、判断为空 5、返回元素个数
实现: 链表可以,顺序表也可以
链表LinkedList push/pop 头插/头删
顺序表 Stack(class ) 尾插/尾删
自己实现栈:利用顺序表实现一个栈
class Stack{
private int[] array;
private int size; <=> top
public void push() {}
public void pop() {}
public int top(){}
public boolean isEmpty(){}
public int size(){}
}
empty() 测试此堆栈是否为空
peek() 查看此堆栈顶部的对象,而不从栈中删除它
pop() 删除次堆栈顶的对象,并将该对象作为此函数的值返回
push() 将项目推送到次堆栈的顶部
search(Object o) 返回一个对象在此堆栈上的基于1的位置
栈的应用 :
1、逆波兰表达式 /后缀表达式的运算 3/((3+2)x(5+6))==> 3 3 2+5 6+x /
JAVA中的队列:(先进先出)(Firt In First Out FIFO)
Queue(interface) LinkedList(class)
Queue<String>=new LinkedList<>();
LinkedList<String>=new LinkedList<>();
术语 队首/队尾
front/rear
操作 push/pop/front/rear..
自己实现: 链表实现(单链表)记录第一个和最后一个结点
头删 pop 尾插 push
记录第一个和最后一个结点
用数组实现队列
1)不搬移
2)空间浪费
1)只有rear走到最后才搬一次
2)循环队列(基本条件无法区分空/满)
rear=(rear+1)%容量
index=(rear-1+容量)%容量
element() 检索,但不删除,这个队列的头
peek() 检索但不删除此队列的头,如果此队列为空,则返回null
poll() 检索并删除此队列的头,如果此队列为空,则返回null
remove() 检索并删除此队列的头
java编译器只认识引用类型。不知道实际指向的对象的类型