栈是一种特殊的线性表,其插入和删除都是在线性表的一端进行的,只允许在栈顶进行操作,插入元素的操作称为入栈(push),删除元素称为出栈(pop).其特点就是先进后出(Last In First Out)。
栈按其存储结构的不同,可以将其分为:顺序栈和链式栈。
顺序栈:采用顺序存储结构的栈。
//顺序栈
public class SeqentialStack<T> {
private List<T> list;
public SeqentialStack(int length){
list=new ArrayList<T>(length);
}
public boolean isEmpty(){
return list.isEmpty();
}
//入栈
public void push(T x){
list.add(x);
}
//返回栈顶元素
public T peek(){
return list.get(list.size()-1);
}
//出栈
public T pop(){
return list.remove(list.size()-1);
}
}
链式栈:采用链式存储的栈。
class LinkedStack<T>{
//对于链式栈来说,入栈和出栈都是对表头插入和删除
class Node<T>{
Node<T> next;
T data;
public Node(){
}
public Node(T data,Node<T> next){
this.data=data;
this.next=next;
}
}
private Node<T> top=new Node<T>();//栈顶节点
public void push(T data){
top=new Node(data,top);//插入到top节点,成为栈中的top节点
}
public T pop(){
T x=top.data;//获取栈顶节点
if(top.next!=null)
top=top.next;
return x;
}
}