目录
栈和队列都是线性表,都是基于List
线性表
数组,链表,字符串,栈,队列
元素按照一条直线排列
非线性结构
树,图
栈(stack)
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。后进先出的线性表,入栈(push)、出栈(pop)、返回栈顶元素(peek)
入栈(push)
/**
*把val入栈
* @param val
*/
public void push(E val){
data.add(val);//默认是尾插
size++;
}
出栈(pop)
/**
*弹出栈顶元素
* @return
*/
public E pop() {
if (isEmpty()) {
// 栈为空,没有栈顶元素
throw new NoSuchElementException("栈为空!没有栈顶元素!");
}
// 删除栈顶元素
E val = data.remove(size - 1);
size --;
return val;
// 等同于 return data.remove(--size);
}
返回栈顶元素(peek)
/**
*返回栈顶元素但不出栈
* @return
*/
public E peek() {
if (isEmpty()) {
throw new NoSuchElementException("栈为空!不能返回栈顶元素!");
}
return data.get(size - 1);
}
public boolean isEmpty(){
return size == 0;
}
队列(Queue)
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out)
入队列:进行插入操作的一端称为 队尾( Tail/Rear )
出队列:进行删除操作的一端称为 队头 ( Head/Front)