• java栈的实现复习


    栈是一种线性表,仅限在一端进行插入和删除操作,特点是先进后出。

    由于栈是一种线性结构,首先可以想到用数组来实现,但由于数组初始化后容量就已经确定,如果不添加扩容操作,则会出现栈溢出,同时扩容操作也会降低一些效率;如果事先九分配较大空间则可能造成资源浪费。一种解决方法是同一个数组实现两个栈,让两个栈向数组中心延伸,当两个栈底元素相遇则溢出,虽然空间利用率大于数组长度的一半,但仍不理想。

    另一种实现方法则是链表实现,链表实现可以避免数组实现的各项问题。

    栈的基本操作接口

    1 public interface StackMethods {
    2     Stack initStack(Stack stack);//栈的初始化
    3     Object getTop() throws Exception;//获取栈顶
    4     void push(Object data);//入栈
    5     public Object pop() throws Exception;//出栈
    6     void clearStack();//清空栈内元素
    7     boolean isStackEmpty();
    8     int stackLength();
    9 }

    栈的实体类

     1 public class Stack {
     2     
     3     public Object data;
     4     public Stack next;  
     5     public Stack( Object data) {     
     6         this.data = data;
     7     }
     8    
     9     
    10 }

    栈基本操作方法的具体实现类SimpleStack

     1 public class SimpleStack implements StackMethods  {
     2     private Stack first = null;
     3    
     4     @Override
     5     public Stack initStack(Stack stack) {
     6        
     7         return null;
     8     }
     9     /**
    10      * 返回站定元素
    11      */
    12     @Override
    13     public Object getTop() throws Exception{
    14         if( first == null)  throw new Exception("empty!");   
    15         return first.data;
    16     }
    17     /**
    18      * 入栈
    19      */
    20     @Override
    21     public void push(Object data) {
    22         Stack stack = new Stack(data);
    23         stack.next = first;
    24         first = stack;
    25     }
    26     /**
    27      * 出栈
    28      */
    29     @Override
    30     public Object pop() throws Exception{
    31         if( first == null)  throw new Exception("empty!");   
    32         Object data = first.data;
    33         first = first.next;
    34         return data;
    35     }
    36     /**
    37      * 清空栈
    38      */
    39     @Override
    40     public void clearStack() {
    41         while(first != null){
    42             first = first.next;
    43         }
    44 
    45     }
    46     
    47     @Override
    48     public boolean isStackEmpty() {
    49        return first == null;
    50     }
    51 
    52     @Override
    53     public int stackLength() {
    54         int i = 0;
    55         while(first != null) i++;
    56         return i;
    57     }
    58     public static void main(String[] args) throws Exception{
    59         SimpleStack s = new SimpleStack();
    60         for(int i=0; i<10; i++){
    61             s.push(i);
    62             System.out.println(s.getTop()+""); 
    63         }
    64             
    65         while(!s.isStackEmpty()){
    66             System.out.println(s.pop()+"");      
    67         }
    68         
    69     }
    70 
    71     
    72 
    73 }
  • 相关阅读:
    第六周例行报告
    第五周每周例行报告
    第三、四周例行报告
    PSP总结报告
    获奖感言
    20181204-1 每周例行报告
    20181127-2 每周例行报告
    软件工程原则的应用实例分析
    20181120-1 每周例行报告
    20181113-2 每周例行报告
  • 原文地址:https://www.cnblogs.com/steve-jiang/p/6436034.html
Copyright © 2020-2023  润新知