栈的定义
1.栈(Stack)是只允许在一端进行插入或删除操作的线性表。
2.它是先进后出的原则储存数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
3.数据进入栈的动作为压栈,数据从栈中出去的动作为弹栈。
栈的实现
栈的api设计
栈代码的实现
import javax.xml.soap.Node; import java.util.Iterator; public class Stack<T> implements Iterable<T>{ //记录首届点 private Node head; //栈中元素个数 private int N; public class Node{ public T item; public Node next; public Node(T item,Node next){ this.item=item; this.next=next; } } public Stack(){ this.head=new Node(null,null); this.N=0; } //判断当前栈中的元素个数为0 public boolean isEmpty(){ return N==0; } //获取栈中元素个数 public int size(){ return N; } //把t元素压入栈中 public void push(T t){ //找到首届点指向的第一个结点 Node oldFirst = head.next; //创建新节点 Node newNode = new Node(t, null); //让首结点指向新结点 head.next=newNode; //让新结点指向原来的第一个结点 newNode.next=oldFirst; //元素个数+1 N++; } public T pop(){ Node oldFirst = head.next; if (oldFirst!=null){ return null; } head.next=oldFirst.next; N--; return oldFirst.item; } @Override public Iterator<T> iterator() { return new SIterator(); } private class SIterator implements Iterator{ private Node n; public SIterator(){ this.n=head; } @Override public boolean hasNext() { return n.next!=null; } @Override public Object next() { n=n.next; return n.item; } } }