zoukankan      html  css  js  c++  java
  • 基于数组实现线性表

      数组是一组内存地址连续的存储单元,所以用数组实现的线性表是顺序存储的。可以通过数组下标轻易的访问不同位置的数据,但要注意下标越界的异常(ArrayIndexOutOfBoundsException)

      用数组实现的线性表,查询与更改方法有着优势。(因为有下标)

      1.MyList接口定义功能

    public interface MyList {
        //新增一个元素
        void add(Object element);
        //删除与输入元素相同的元素
        void delete(Object element);
        //根据索引删除元素
        void delete(int index);
        //更新元素
        void update(int index,Object newelement);
        //三种查询形式
        boolean contains(Object element);
        
        Object at(int index);
        
        int indexOf(Object element);
    }

       2.MyArrayList类实现接口功能

      1 public class MyArrayList implements MyList{
      2     private Object elements[];//真正存储元素的底层结构
      3     private int size;//当前的存储个数
      4     private int capcity;//总容量
      5     
      6     public MyArrayList(int capcity)
      7     {
      8         this.size=0;
      9         this.capcity=capcity;
     10         elements=new Object[capcity];
     11     }
     12     public MyArrayList()
     13     {
     14         this(10);
     15     }
     16     @Override
     17     public void add(Object element) {
     18         if(size==capcity)//因为数组是不可变长的,所以需要进行特殊扩容
     19         {
     20             capcity=capcity*2;
     21             Object newElements[]=new Object[capcity];
     22             for(int i=0;i<size;i++)
     23             {
     24                 newElements[i]=elements[i];
     25             }
     26             elements=newElements;
     27         }
     28         elements[size++]=element;
     29         
     30     }
     31 
     32     @Override
     33     public void delete(Object element) {
     34         int index=indexOf(element);//调用本类的方法
     35         if(index>=0)
     36             delete(index);
     37         
     38         
     39     }
     40 
     41     @Override
     42     public void delete(int index) {
     43         //防复杂度的震荡
     44         if(size<=capcity/4&&!(capcity/4==0))
     45         {
     46             capcity=capcity/2;
     47             Object newElements[]=new Object[capcity];
     48             for(int i=0;i<size;i++)
     49             {
     50                 newElements[i]=elements[i];
     51             }
     52             elements=newElements;
     53         }
     54         if(size>0)//防止下标溢出
     55         {
     56             for(int i=index;i<size-1;i++) 
     57             {
     58                 elements[i]=elements[i+1];
     59             }
     60             elements[size-1]=null;
     61             size--;
     62         }
     63     }
     64 
     65     @Override
     66     public void update(int index, Object newelement) {
     67         elements[index]=newelement;
     68         
     69     }
     70 
     71     @Override
     72     public boolean contains(Object element) {
     73         return indexOf(element)>=0;
     74         
     75         
     76     }
     77 
     78     @Override
     79     public Object at(int index) {
     80         return elements[index];
     81     }
     82     
     83     
     84     @Override
     85     public int indexOf(Object element) {
     86         for(int i=0;i<size;i++)
     87         {
     88             //注意要用equals方法进行比较,因为类型为Object.
     89             if(element.equals(elements[i]))
     90                 return i;
     91         }
     92         return -1;
     93     }
     94     
     95     @Override
     96     public String toString()
     97     {
     98         //for循环对 字符的改变过多 需要使用可变字符串(减少对内存的消耗)
     99         StringBuilder sb=new StringBuilder("[");
    100         for(int i=0;i<size;i++)
    101         {
    102             sb.append(elements[i]+(i<size-1?",":""));
    103         }
    104         sb.append("]");
    105         return "MyArrayList{elements="+sb+"}"+"  capciyt:"+getCapcity()+"  size:"+getSize();
    106     }
    107     
    108     
    109     public int getSize() {
    110         return size;
    111     }
    112     
    113     public int getCapcity() {
    114         return capcity;
    115     }
    116     
    117     
    118     
    119 
    120     
    121 }
  • 相关阅读:
    在工作中你可能会遇见的事情哈
    原生js判断某个区域的滚动条滚动到了底部
    震惊p div 标签 可以编辑高度随内容的编辑而发生变化
    Codeforces Round #628 (Div. 2) B. CopyCopyCopyCopyCopy(Set)
    Codeforces Round #628 (Div. 2) A. EhAb AnD gCd(LCM & GCD)
    Codeforces Round #613 (Div. 2) C. Fadi and LCM(LCM & GCD)
    Codeforces Round #613 (Div. 2) B. Just Eat It!(前缀和)
    Codeforces Round #613 (Div. 2) A. Mezo Playing Zoma(逻辑)
    GPLT L2-006 树的遍历(二叉树)
    poj 3278 Catch That Cow(记忆化广度优先搜索)
  • 原文地址:https://www.cnblogs.com/LgxBoKeYuan/p/10175205.html
Copyright © 2011-2022 走看看