本文来详细介绍栈结构的链表实现,链表:一种递归的数据结构它或者为空(null),或者是指向一个结点(node)的引用,该节点包含一个泛型的元素和一个指向另一条链表的引用。链表实现栈结构最大的优势就是插入,删除方便,并且不必考虑扩容问题。
节点记录:
public class Node{
Item item;
Node next;
}
栈的API:
public int size() //返回栈中数据个数
public void push(Item item) //进栈
public Item pop() //出栈
public boolean isEmpty() //是否为空
public Iterator iterator() //返回迭代器对象
代码实现:
import java.util.Iterator;
//使用泛型
public class MyLinkedStack<Item> implements Iterable<Item>{
private Node first;
private int N;
//定义节点
private class Node{
Item item;
Node next;
}
//判断是否为空栈
public boolean isEmpty(){
return first==null;
}
//返回数据个数
public int size(){
return N;
}
//入栈,新进栈的数据永远在first处
public void push(Item item){
Node oldFirst = first;
first = new Node();
first.item = item;
first.next = oldFirst;
N++;
}
//出栈
public Item pop(){
Item item = first.item;
first = first.next;
N--;
return item;
}
//返回迭代器对象
@Override
public Iterator<Item> iterator() {
return new MyLinkedStackIterator();
}
//迭代的实现
private class MyLinkedStackIterator implements Iterator<Item>{
//获取外部类的first对象
private Node n = first;
@Override
public boolean hasNext(){
return n!=null;
}
@Override
public Item next(){
Item item = n.item;
n = n.next;
return item;
}
}
}
栈的链表实现完成。