1.知识储备
2.代码实现:
package Stack;
import java.util.Iterator;
public class Stack<T> implements Iterable<T>{
//记录首节点
private Node head;
//记录元素个数
private int N;
private class Node{
public T item;
public Node next;
public Node(T item,Node next) {
// TODO Auto-generated constructor stub
this.item=item;
this.next=next;
}
}
public Stack() {
// TODO Auto-generated constructor stub
this.head=new Node(null, null); //初始化头节点
this.N=0;
}
//判断当前元素个数是否为零
public boolean isEmpty(){
return N==0;
}
//获取栈中元素的个数
public int size(){
return N;
}
//压栈操作
public void push(T t){
//找到首节点指向的第一个节点
Node oldFirst =head.next;
//创建新节点
Node newFirst=new Node(t,null);
//让首节点指向新节点
head.next=newFirst;
//让新节点指向原来的第一个节点
newFirst.next=oldFirst;
//让元素个数加1
N++;
}
//弹栈操作
public T pop(){
//找到首节点指向的第一个节点
Node oldFirst=head.next;
//安全性校验,防止链表为空
if(oldFirst==null){
return null;
}
//让首节点指向原来第一个节点的下一个节点
head.next=oldFirst.next;
//元素个数-1
N--;
return oldFirst.item;
}
//遍历方法打包
public static void foreach(Stack<String> list){
for(String item : list){
System.out.print(item+"->");
}
System.out.println();
}
@Override
public Iterator<T> iterator() {
// TODO Auto-generated method stub
return new SIterator();
}
private class SIterator implements Iterator{
private Node n; //用来记录每次拿到的当前节点
public SIterator() {
// TODO Auto-generated constructor stub
this.n=head; //遍历方法初始化,时n指向头节点
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return n.next!=null;
}
@Override
public Object next() {
// TODO Auto-generated method stub
n=n.next;
return n.item;
}
}
}
3.测试类:
package Stack;
public class StackTest {
public static void main(String[] args) {
//创建栈对象
Stack<String> stack1=new Stack<String>();
//压栈操作
stack1.push("美国队长");
stack1.push("钢铁侠");
stack1.push("雷神");
stack1.push("绿巨人");
stack1.push("黑寡妇");
stack1.push("蜘蛛侠");
stack1.push("冬日战士");
stack1.push("黑豹");
stack1.push("鹰眼");
//遍历
Stack.foreach(stack1);
//显示元素个数
System.out.println("元素个数:"+stack1.size());
//弹栈操作
System.out.println(stack1.pop());
//遍历
Stack.foreach(stack1);
//显示元素个数
System.out.println("元素个数:"+stack1.size());
}
}
4.测试结果: