分享

用JAVA实现堆栈(链表篇)

 Java修炼馆 2011-09-27
下面是用java 链表 实现堆栈

  1. /** 
  2.  * 表示链表的一个节点 
  3.  * @author Adair 
  4.  */  
  5. public class Node{  
  6.   Object element;  
  7.   Node next;  
  8.     
  9.   public Node(Object element) {  
  10.       this(element, null);  
  11.   }  
  12.   
  13.   public Node(Object element, Node n) {  
  14.       this.element = element;  
  15.       next = n;  
  16.   }  
  17.   
  18.   public Object getElement() {  
  19.       return element;  
  20.   }  
  21.   
  22.   public void setElement(Object element) {  
  23.       this.element = element;  
  24.   }  
  25.   
  26.   public Node getNext() {  
  27.       return next;  
  28.   }  
  29.   
  30.   public void setNext(Node next) {  
  31.       this.next = next;  
  32.   }  
  33. }  
  34.   
  35.   
  36.   
  37.   
  38. /** 
  39.  * 用链表实现堆栈 
  40.  * @author Adair 
  41.  */  
  42. public class ListStack  
  43. {  
  44.   Node header;  //栈顶元素   
  45.   
  46.   int elementCount;// 栈内元素个数   
  47.   
  48.   int size;// 栈的大小   
  49.   
  50.   /** 
  51.    * 构造函数,构造一个空的堆栈 
  52.    */  
  53.   public ListStack()  
  54.   {  
  55.     header = null;  
  56.     elementCount = 0;  
  57.     size = 0;  
  58.   }  
  59.   
  60.   /** 
  61.    * 通过构造器 自定义栈的大小 
  62.    * @param size 栈的大小 
  63.    */  
  64.   public ListStack(int size)  
  65.   {  
  66.     header = null;  
  67.     elementCount = 0;  
  68.     this.size = size;  
  69.   }  
  70.   
  71.   /** 
  72.    * 设置堆栈大小 
  73.    * @param size 堆栈大小 
  74.    */  
  75.   public void setSize(int size)  
  76.   {  
  77.     this.size = size;  
  78.   }  
  79.   
  80.   /** 
  81.    * 设置栈顶元素 
  82.    * @param header 栈顶元素 
  83.    */  
  84.   public void setHeader(Node header)  
  85.   {  
  86.     this.header = header;  
  87.   }  
  88.   
  89.   /** 
  90.    * 获取堆栈长度 
  91.    * @return 堆栈长度 
  92.    */  
  93.   public int getSize()  
  94.   {  
  95.     return size;  
  96.   }  
  97.   
  98.   /** 
  99.    * 返回栈中元素的个数 
  100.    * @return 栈中元素的个数 
  101.    */  
  102.   public int getElementCount()  
  103.   {  
  104.     return elementCount;  
  105.   }  
  106.   
  107.   /** 
  108.    * 判断栈是否为空 
  109.    * @return 如果栈是空的,返回真,否则,返回假 
  110.    */  
  111.   public boolean isEmpty()  
  112.   {  
  113.     if (elementCount == 0)  
  114.       return true;  
  115.     return false;  
  116.   }  
  117.   
  118.   /** 
  119.    * 判断栈满 
  120.    * @return 如果栈是满的,返回真,否则,返回假 
  121.    */  
  122.   public boolean isFull()  
  123.   {  
  124.     if (elementCount == size)  
  125.       return true;  
  126.     return false;  
  127.   }  
  128.   
  129.   /** 
  130.    * 把对象入栈 
  131.    * @param value 对象 
  132.    */  
  133.   public void push(Object value)  
  134.   {  
  135.     if (this.isFull())  
  136.     {  
  137.       throw new RuntimeException("Stack is Full");  
  138.     }  
  139.     header = new Node(value, header);  
  140.     elementCount++;  
  141.   }  
  142.   
  143.   /** 
  144.    * 出栈,并返回被出栈的元素 
  145.    * @return 被出栈的元素 
  146.    */  
  147.   public Object pop()  
  148.   {  
  149.     if (this.isEmpty())  
  150.     {  
  151.       throw new RuntimeException("Stack is empty");  
  152.     }  
  153.   
  154.     Object obj = header.getElement();  
  155.   
  156.     header = header.getNext();  
  157.   
  158.     elementCount--;  
  159.     return obj;  
  160.   }  
  161.   
  162.   /** 
  163.    * 返回栈顶元素 
  164.    * @return 栈顶元素 
  165.    */  
  166.   public Object peek()  
  167.   {  
  168.     if (this.isEmpty())  
  169.     {  
  170.       throw new RuntimeException("Stack is empty");  
  171.     }  
  172.   
  173.     return header.getElement();  
  174.   }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多