基于java实现的stack
package com.test.stack;
import java.util.Iterator;
public class StackDemo<T> implements Iterable{
private Node head;
private int N;
public static void main(String[] args) {
StackDemo<String> stackDemo = new StackDemo<>();
stackDemo.push("a");
stackDemo.push("b");
stackDemo.push("c");
stackDemo.push("d");
for (Object item : stackDemo) {
System.out.println(item);
}
System.out.println("----------------");
System.out.println(stackDemo.pop());
System.out.println("----------------------");
for (Object item : stackDemo) {
System.out.println(item);
}
}
public StackDemo(){
head = new Node(null,null);
N = 0;
}
//栈是否为空
public boolean isEmpty(){
return N == 0;
}
//数据压入栈
public void push(T item){
Node oldNode = head.next;
Node newNode = new Node(item,oldNode);
head.next = newNode;
N++;
}
//弹出栈顶数据
public T pop(){
Node oldNode = head.next;
Node oldNodeNext = oldNode.next;
head.next = oldNodeNext;
N--;
return oldNode.item;
}
//获取栈的长度
public int size(){
return N;
}
//内部类,实现遍历
private class SIterator implements Iterator<T>{
private Node n = head;
@Override
public boolean hasNext() {
return n.next!=null;
}
@Override
public T next() {
Node node = n.next;
n = n.next;
return node.item;
}
}
@Override
public Iterator<T> iterator() {
return new SIterator();
}
private class Node{
public T item;
public Node next;
public Node(T item,Node next){
this.item = item;
this.next = next;
}
}
}