首页 > 代码库 > 链式栈的实现

链式栈的实现

     链表实现的栈,在想象栈的时候,最好把他竖着想象成一个立着的容器。 

     然后往里面一个一个的加节点:  

     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 =http://www.mamicode.com/ data;16         this.next = null;17     }18     19     //其它节点构造函数20     public Node(Object data, Node next){21         this.data =http://www.mamicode.com/ 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 data46      */47     public void setData(Object data){48         this.data =http://www.mamicode.com/ 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     @Override19     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     @Override33     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     @Override47     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     @Override59     public boolean isEmpty() throws Exception {60         return top == null;61     }62 63 }

  好了,链式栈的实现是不是也很简单呢。。呵呵,欢迎继续关注算法的更新~

链式栈的实现