目录
1、栈(Stack)
1.1 概念
栈栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 入栈 push:栈的插入操作叫做进栈/压栈/入栈,入栈数据在栈顶。 出栈 pop:栈的删除操作叫做出栈。出栈数据在栈顶。
1.2 代码实现
1. 利用顺序表实现,即使用尾插 + 尾删的方式实现 2. 利用链表实现,则头尾皆可
相对来说,顺序表的实现上要更为简单一些,所以我们优先用顺序表实现栈。
package stack_queue.stack;
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
//基于数组的顺序表实现 栈
public class MyStack<E> {
//当前栈的数据个数
private int size;
//实际存储数据的动态数组 - ArrayList
private List<E> data = new ArrayList<>();
/**
* 将val入栈
* @param val
*/
public void push(E val){
//默认尾插
data.add(val);
size++;
}
/**
* 弹出栈顶元素
* 返回栈顶的值
* @return
*/
public E pop(){
if (isEmpty()){
//栈为空
throw new NoSuchElementException("stack is empty!cannot pop!");
}
//删除栈顶元素
E val = data.remove(size - 1);
size--;
return val;
//等同于 return data.remove(--size);
}
/**
* 返回栈顶元素但不出栈
* @return
*/
public E peek(){
if (isEmpty()){
throw new NoSuchElementException("stack is empty!cannot peek");
}
return data.get(size-1);
}
/**
* 判断当前栈是否为空
* @return
*/