标签:style blog io ar color sp java on 数据
链表实现的栈,在想象栈的时候,最好把他竖着想象成一个立着的容器。
然后往里面一个一个的加节点:
1.先加入top节点
2.然后再在top节点上加入node1节点,node1节点指向top节点
3.再在node1节点上加入node2节点,node2节点指向node1节点
..........
下面描述用java实现链式栈的代码:
Stack.java 链式栈的接口
1 package com.yeyan.linkstack; 2 /** 3 * 链式栈的接口 4 * @author yeyan 5 * @date 2014-12-11 6 * API: 7 * push(Object obj) 入栈 8 * pop() 出栈 9 * getTop() 获取栈顶元素 10 * isEmpty() 判断栈是否为空 11 */ 12 public interface Stack { 13 //入栈 14 public void push(Object obj) throws Exception; 15 //出栈 16 public Object pop() throws Exception; 17 //获取栈顶元素 18 public Object getTop() throws Exception; 19 //判断栈是否为空 20 public boolean isEmpty() throws Exception; 21 }
Node.java 链式栈的节点数据类型
1 package com.yeyan.linkstack; 2 /** 3 * 链表节点数据结构 4 * @author yeyan 5 * @date 2012-12-11 6 */ 7 public class Node { 8 //数据域 9 public Object data; 10 //指针域,指向下一个节点 11 public Node next; 12 13 // 首节点构造函数 14 public Node(Object data){ 15 this.data = data; 16 this.next = null; 17 } 18 19 //其它节点构造函数 20 public Node(Object data, Node next){ 21 this.data = data; 22 this.next = next; 23 } 24 25 /** 26 * 获取下一个节点 27 */ 28 public Node getNext(){ 29 return this.next; 30 } 31 /** 32 * 设置下一个节点 33 */ 34 public void setNext(Node next){ 35 this.next = next; 36 } 37 /** 38 * 获取当前节点数据 39 */ 40 public Object getData(){ 41 return this.data; 42 } 43 /** 44 * 设置当前节点数据 45 * @param data 46 */ 47 public void setData(Object data){ 48 this.data = data; 49 } 50 }
LinkStack.java 链式栈的实现类
1 package com.yeyan.linkstack; 2 /** 3 * 链式栈的实现 4 * @author yeyan 5 * @date 2012-12-11 6 */ 7 public class LinkStack implements Stack { 8 private Node top; //链式栈顶节点 9 private int size; //节点个数 10 11 public LinkStack(){ 12 top = null; 13 size = 0; 14 } 15 /** 16 * 入栈 17 */ 18 @Override 19 public void push(Object obj) throws Exception { 20 Node node = new Node(obj); 21 if(isEmpty()) { 22 top = node; 23 } else{ 24 node.setNext(top); 25 top = node; 26 } 27 size ++; 28 } 29 /** 30 * 出栈 31 */ 32 @Override 33 public Object pop() throws Exception { 34 if(isEmpty()) { 35 throw new Exception("栈为空!"); 36 } 37 Object obj = top.getData(); 38 top = top.getNext(); 39 size --; 40 return obj; 41 } 42 43 /** 44 * 获取栈顶元素 45 */ 46 @Override 47 public Object getTop() throws Exception { 48 if(isEmpty()) { 49 throw new Exception("栈为空!"); 50 } 51 Object obj = top.getData(); 52 return obj; 53 } 54 55 /** 56 * 判断栈节点是否为空 57 */ 58 @Override 59 public boolean isEmpty() throws Exception { 60 return top == null; 61 } 62 63 }
好了,链式栈的实现是不是也很简单呢。。呵呵,欢迎继续关注算法的更新~
标签:style blog io ar color sp java on 数据
原文地址:http://www.cnblogs.com/jones-c/p/4156671.html