栈
基本概念
栈是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)
称数据进入到栈的动作为压栈,数据从栈中出去的动作为弹栈
栈的实现
栈API设计
代码实现
public class Stack<T> implements Iterable<T>{
//记录首结点
private Node head;
//当前栈的个数
private int N;
public Stack(){
head=new Node(null,null);
N=0;
}
//结点类
private class Node{
Node next;
T item;
public Node(T item,Node next){
this.item=item;
this.next=next;
}
}
//判断栈是否为空,是返回true,否返回false
public boolean isEmpty(){
return N==0;
}
//获取栈中元素的个数
public int size(){
return N;
}
//弹出栈顶元素
public T pop(){
//找到首结点指向的第一个结点
Node oldNode=head.next;
if(oldNode==null){
return null;
}
//让首结点指向原来第一个结点的下一个结点
head.next=oldNode.next;
//元素个数-1
N--;
return oldNode.item;
}
//向栈中压入元素t
public void push(T t){
//找到首结点指向的第一个结点
Node oldNode=head.next;
//创建新结点
Node newNode=new Node(t,null);
//让首结点指向新结点
head.next=newNode;
//让新结点指向原来的结点
newNode.next=oldNode;
//元素个数+1
N++;
}
@Override
public Iterator<T> iterator() {
return new TIterator();
}
private class TIterator implements Iterator<T>{
private Node n=head;
@Override
public boolean hasNext() {
return n.next!=