实体类
package stack;
/**
* 使用链表的方式来实现栈
* @author Administrator
*
* @param <E>
*/
public class MyStack<E> {
Node<E> top = null;
public boolean isEmpty() {
return top == null;
}
/**
* 压栈操作
* @param
*/
public void push(E data) {
Node<E> newNode = new Node<E>(data);
newNode.next = top;
top = newNode;
}
/**
* 弹栈操作
* @return
*/
public E pop() {
if(this.isEmpty()) {
return null;
}
E data = top.data;
top = top.next;
return data;
}
/**
* 获取栈顶结点的数据域的值
* @return
*/
public E peak() {
if(this.isEmpty()) {
return null;
}
return top.data;
}
}
/**
* 结点类
* @author Administrator
*
* @param <E>
*/
class Node<E>{
// 数据域
E data;
// 指针域
Node<E> next = null;
// 构造器
public Node(E data) {
this.data = data;
}
}
测试类
package stack;
public class Test {
public static void main(String[] args) {
MyStack<Integer> stack = new MyStack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
while(!stack.isEmpty()) {
System.out.println(stack.pop());
}
}
}
结果
和单链表的添加不同的是,这种实现方式使得栈中的第一个被添加进去的元素是没有next的