栈的定义
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;
}
}
}