Java栈的三种实现方法,使用Java自带的方法 Stack、用数组模拟Stack、用链表模拟Stack;
第一种方法,使用Java自带的Stack方法,代码如下:
package study.stack; import java.util.Stack; /** * Created by Taoyongpan on 2017/10/13. * 利用Java自带的栈方法 */ public class StackDemo { public static void main(String[] args){ Stack<String> user = new Stack<String>(); user.push("taoyongpan1"); user.push("taoyongpan2"); user.push("taoyongpan3"); user.push("taoyongpan4"); System.out.println("栈顶"+user.peek()); System.out.println("查找"+user.search("taoyongpan1")); while (!user.empty()){ System.out.println(user.pop()); } } } 运行结果: 栈顶taoyongpan4 查找4 taoyongpan4 taoyongpan3 taoyongpan2 taoyongpan1 Process finished with exit code 0
第二张方法,用数组模拟栈,代码如下:
package study.stack; /** * Created by Taoyongpan on 2017/10/13. * 利用数组创建栈 */ public class ArrayStack { Object stack[] =null; int size; int top = -1; public ArrayStack(){ stack = new Object[100]; size = 100; } public ArrayStack(int size){ stack = new Object[size]; this.size = size; } //判断是否为空 public boolean isEmpty(){ if (top==-1){ return true; }else { return false; } } //判断是否已满 public boolean isFull(){ if (top>=(size-1)){ return true; }else { return false; } } //入栈 public void push(Object item){ if (isFull()){ System.out.println("堆栈已经满了"); return; } top++; stack[top] = item; } //出栈 public Object pop(){ Object item = null; if (isEmpty()){ System.out.println("堆栈为空"); return item; } item = stack[top]; top--; return item; } //读取栈顶元素 public Object peek(){ if (isEmpty()){ System.out.println("堆栈为空"); return null; } return stack[top]; } //读取大小 public int size(){ return top+1; } //获取容量 public int capcity(){ return size; } }
package study.stack; /** * Created by Taoyongpan on 2017/10/13. */ public class StackArrayDemo { public static void main(String[] args){ ArrayStack user = new ArrayStack(); user.push("taoyongpan1"); user.push("taoyongpan2"); user.push("taoyongpan3"); user.push("taoyongpan4"); System.out.println("堆栈的大小:"+user.size); System.out.println(user.peek()); while (!user.isEmpty()){ System.out.println(user.pop()); } } }
结果如下:
堆栈的大小:100 taoyongpan4 taoyongpan4 taoyongpan3 taoyongpan2 taoyongpan1 Process finished with exit code 0
第三种方法,代码 如下:
package study.stack; /** * Created by Taoyongpan on 2017/10/13. */ public class StackNode { private Object data; private StackNode next; //创建头结点 public StackNode(){ data = null; next = null; } //添加节点 public StackNode(Object data){ this.data = data; next = null; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public StackNode getNext() { return next; } public void setNext(StackNode next) { this.next = next; } }
package study.stack; /** * Created by Taoyongpan on 2017/10/13. */ public class StackNodeDemo { StackNode head = null; public StackNodeDemo(){ head =new StackNode(); } //入栈 public void push(Object data){ StackNode newNode = new StackNode(data); newNode.setNext(head.getNext()); head.setNext(newNode); } //判断是否为空 public boolean isEmpty(){ if (head.getNext()==null){ return true; }else { return false; } } //出栈 public Object pop(){ Object item = null; if (isEmpty()){ return item; } item = head.getNext().getData(); head.setNext(head.getNext().getNext()); return item; } //获得栈的大小 public int size(){ int len = 0; StackNode node = head; while (node.getNext()!=null){ len++; node = node.getNext(); } return len; } //读取栈顶元素 public Object peek(){ Object item = null; if (isEmpty()){ return item; } item = head.getNext().getData(); return item; } public static void main(String[] args){ StackNodeDemo user = new StackNodeDemo(); user.push("taoyongpan1"); user.push("taoyongpan2"); user.push("taoyongpan3"); user.push("taoyongpan4"); System.out.println("栈的大小:"+user.size()); System.out.println("读取栈顶元素:"+user.peek()); while (!user.isEmpty()){ System.out.println(user.pop()); } } }
运行结果如下:
栈的大小:4 读取栈顶元素:taoyongpan4 taoyongpan4 taoyongpan3 taoyongpan2 taoyongpan1 Process finished with exit code 0