代码如下:
栈类:
import java.util.Iterator;
public class Stack<Item> /*implements Iterable<Item>*/ {
private Node first; //栈顶
private int N; //元素数量
//链表
private class Node{
Item item;
Node next;
}
//判断栈是否为空
public boolean isEmpty(){
return N == 0;
}
//返回栈元素的数量
public int size(){
return N;
}
//入栈操作
public void push(Item item){
Node oldfirst = first;
first = new Node();
first.item = item;
first.next = oldfirst;
N++;
}
//弹出栈
public Item pop(){
Item item = first.item;
first = first.next;
N--;
return item;
}
// @Override
// public Iterator<Item> iterator() {
// // TODO Auto-generated method stub
// return null;
// }
}
运行类:
public class Run {
public static void main(String[] args) {
// TODO Auto-generated method stub
Stack<String> s = new Stack<String>();
//System.out.println(s.size());
String item1 = "to be or not to - be - - that - - - is ";
String[] item = item1.split(" ");
// for(int i = 0; i < item.length; i++)
// System.out.print(item[i] + " ");
for(int i = 0; i < item.length; i++){
if(!item[i].equals("-"))
s.push(item[i]);
else if(!item[i].isEmpty())
System.out.print(s.pop() + " ");
}
System.out.println("("+s.size()+" left on stack)");
}
}
pop方法图解:
进栈的顺序是CBA,而新进栈的元素指向它先前的元素。出栈就按照后进先出。