zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    jQuery Colorpicker Spectrum api 中文 文档 属性 事件 方法
    java使用dbutils工具类实现小程序 管家婆记账软件
    java实现服务端开启多线程处理客户端的上传图片请求
    java 基于tcp客户端服务端发送接收数据
    java基于udp实现键盘录入聊天
    java实现udp发送端和接收端
    java通过读取本地文件获取反射方法参数,执行对象方法
    java通过反射获取私有的构造方法,及反射擦除泛型数据类型约束
    Java反射获取类对象的三种方式
    java使用DBCP连接池创建工具类
  • 原文地址:https://www.cnblogs.com/steve-jiang/p/6436034.html
Copyright © 2011-2022 走看看