链式栈中每个结点SLNode都由data域和指向下一个结点的引用nextNode组成。
栈顶引用为top。
/**
* 链式栈类
* @author liangxiamoyi
*
* @param <T>
*/
public class LStack<T> {
/**
* 栈顶引用
*/
private SLNode<T> top;
/**
* 构造函数
*/
public LStack(){
top=null;
}
/**
* 判断栈是否为空
* @return
*/
public boolean isEmpty(){
return top==null;
}
/**
* 清空栈
*/
public void clear(){
while(!isEmpty()){
top=top.nextNode;
}
}
/**
* 压栈
* @param item 进栈元素值
* @return 成功返回true
*/
public boolean push(T item){
top=new SLNode<T>(item,top);
return true;
}
/**
* 弹栈
* @return 返回弹出元素值
*/
public T pop(){
if(isEmpty()){
throw new RuntimeException("empty stack");
}
SLNode<T> temp=top;
top=top.nextNode;
return temp.data;
}
/**
* 读取栈顶元素值
* @return
*/
public T peek(){
if(isEmpty()){
throw new RuntimeException("empty stack");
}
return top.data;
}
//测试
public static void main(String[] args){
LStack<Character> lstack=new LStack<Character>();
lstack.push('a');
lstack.push('b');
lstack.push('c');
lstack.push('d');
System.out.println(lstack.peek());
lstack.pop();
System.out.println(lstack.peek());
lstack.clear();
System.out.println(lstack.peek());
}
}
SLNode类:/**
* 单链表结点类
* @author liangxiamoyi
*
* @param <T>
*/
public class SLNode<T> {
/**
* 数据域
*/
protected T data;
/**
* 下一个结点
*/
protected SLNode<T> nextNode;
/**
* 构造方法
* @param node 下一结点
*/
public SLNode(SLNode<T> node){
this.nextNode=node;
}
/**
* 构造方法
* @param data 数据
* @param node 下一结点
*/
public SLNode(T data,SLNode<T> node){
this.data=data;
this.nextNode=node;
}
/**
* 获得数据
* @return
*/
public T getData(){
return data;
}
/**
* 获得下一结点
* @return
*/
public SLNode<T> getNextNode(){
return nextNode;
}
/**
* 设置数据
* @param data
*/
public void setData(T data){
this.data=data;
}
/**
* 设置下一结点
* @param node
*/
public void setNextNode(SLNode<T> node){
this.nextNode=node;
}
}