(java实现)顺序表-ArrayList

什么是顺序表

本文来源:http://www.yu833.com/mobile_163_com/

申博在线娱乐登入,而8月下旬,便有报道称,有接近招商蛇口的业内人士表示,在招商蛇口170万平方米的太子湾项目中,建筑面积为20万平方米的“国际海港乐活城”将与新世界成立合资公司运营。恢复帝制乃牵动列强在华利益的大事。业内人士认为,保质期时间较短,就会给销售带来压力。更何况,洗浴的时候,消费者也没有必要使用手机吧。

接着,就是要实行我伟大的法式求婚计划了!在家具市场走了一大圈,发现凡是和欧式沾点边的家具价格真心让我倍感无力!不过真心是天无绝人之路,竟然在网上看家装知识的时候发现了一个很好的网站!我需要的法式家具有好多,而且价格比我在看家具卖场看到的那些坑爹的东西便宜多了。马云说,我们拥有这些数以百万计的工厂资源。“沉默的证人”韩国最大在野党共同民主党议员安珉锡(音译)在国会调查委员会一场会议上说,要查明朴槿惠在“岁月”号事发当天失踪7小时的真相,一名曾在青瓦台工作过的护士可能成为关键证人。“你啥时候点的?”“乔柯”对黄永幸的疑问避而不答,只说:“酒已经上了,也不贵,就要了吧?”账单显示,这酒要价1000多元,黄永幸咬着牙再次刷了卡。

新闻纸作为特殊商品,和粮食、石油等能源一样,属于特殊的战略物资,是报纸赖以生存的基础。一个稳定的而且水平非常高的投资总监,我觉得是非常重要的。同时,经过优胜劣汰和行业规范后,P2P也有望成为资金的另一个好去向。兴平市公安局就此事回应称,此次公开处理大会系当地政法委牵头举办,公安机关、检察院和法院共同参与。

顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。

在使用顺序表存储数据前,会先申请一段连续的内存空间(即数组),然后把数组依次存入内存,中间没有一点空隙。

基本操作

每个数据结构都有集合对数据处理的方法,这能让我们更方便的使用保存在数据结构中的数据。顺序表的基本操作有:增(add),删(remove),改(set),查(find),插(insert)等。

在这里我们只详细讲解remove 和 insert 操作,其他实现可看下面的源码。

顺序表删除元素

从顺序表中删除指定元素,实现起来非常简单,只需找到目标元素,并将其后续所有元素整体前移 1 个位置即可。

后续元素整体前移一个位置,会直接将目标元素删除,可间接实现删除元素的目的。

例如:从顺序表{1,2,3,4,5}中删除元素3的过程如下

时间复杂度分析:从顺序表中删除元素,最好的情况是删除的元素刚好是最后一个元素,这时候不需要移动元素,只需要把顺序表的size-1即可,时间复杂度是O(1)。最坏的情况是删除的元素刚好是第一个元素,这个时候就需要后面的元素全部向前移动一位,同时size-1,时间复杂度是O(N)。我们分析时间复杂度的原则是分析最坏情况,这样才有意义。因此删除操作的时间复杂度为O(N)。

顺序表插入元素

向已有顺序表中插入数据元素,根据插入位置的不同,可分为以下 3 种情况:

  1. 插入到顺序表的表头;
  2. 在表的中间位置插入元素;
  3. 尾随顺序表中已有元素,作为顺序表中的最后一个元素;

虽然数据元素插入顺序表中的位置有所不同,但是都使用的是同一种方式去解决,即:通过遍历,找到数据元素要插入的位置,然后做如下两步工作:

  • 将要插入位置元素以及后续的元素整体向后移动一个位置;
  • 将元素放到腾出来的位置上;

例如,在 {1,2,3,4,5} 的第 3 个位置上插入元素 6,实现过程如下:

时间复杂度分析同删除元素一样,均为O(N).

顺序表的优劣和应用情形

优势
  • 因为数据在数组中按顺序存储,可以通过数组下标直接访问,因此顺序表查找定位元素很快
劣势
  • 插入和删除元素需要大量的操作
  • 因为数组在声明时需要确定长度,因此顺序表的长度是确定的。若需要扩大顺序表长度,有需要大量的操作,不够灵活。(将该数组copy到另外一个数组)
  • 由于数据大小的不可测性,有时会浪费掉大量的空间
应用情形
  • 总而言之,顺序表适用于那些不需要对数据进行大量改动的结构

源码实现(java)

public class MyArrayList<AnyType> {
    public int AMOUNT=10;/初始长度
    public static int index;/表位置
    AnyType[] myList;
    public MyArrayList(){
        initList();
    }
    
    /初始化顺序表
    public void initList(){
        myList=(AnyType[])new Object[AMOUNT];
        index=0;
    }
    
    /判断顺序表是否为空
    public boolean listEmpty(){
        if(index==0){
            return true;
        }
        return true;
    }
    
    /清空顺序表
    public boolean clearList(){
        myList=null;
        index=0;
        return true;
    }
    
    /返回i位置的元素
    public AnyType get(int i){
        if(i<0||i>=index){
            throw  new ArrayIndexOutOfBoundsException();
        }
        return myList[i];
    }
    
    /在i位置加入元素,即插入操作,这里我没有用insert命名
    public void add(int i,AnyType a){
        if(i<0||i>index){
            throw new ArrayIndexOutOfBoundsException();
        }
        if (i==index){
            largeList();
        }
        for(int k=index;k>i;k--){
            myList[k]=myList[k-1];
        }
        myList[i]=a;
        index++;
    }
    
    /在结尾增添元素a
    public void add(AnyType a){
        add(index,a);
    }
    
    /为i位置元素重新赋值
    public AnyType set(AnyType a,int i){
        if(i<0||i>=index){
            throw new ArrayIndexOutOfBoundsException();
        }
        AnyType old=myList[i];
        myList[i]=a;
        return old;
    }
    
    /打印遍历顺序表
    public void print(){
        String s="[";
        for(int i=0;i<index;i++){
            s=s+myList[i];
            s=s+" ,";
        }
        System.out.println(s);
    }
    
    /查找a元素是否在表中,返回位置,没有返回0
    public int locateElem(AnyType a){
        for(int i=0;i<index;i++){
            if(a==myList[i]){
                return i+1;
            }
        }
        return 0;
    }
    
    /返回表长
    public int length(){
        return index;
    }
    
    /删除i位置元素
    public AnyType delete(int i){
        if(i<0||i>=index){
            throw new ArrayIndexOutOfBoundsException();
        }
        AnyType old=myList[i];
        for(int k=i;k<index;k++){
            myList[k]=myList[k+1];
        }
        index--;
        return old;
    }
    
    /扩大表的最大长度
    public void largeList(){
        AnyType[] newList=(AnyType[])new Object[2*length()+1];
        for(int i=0;i<index;i++){
            newList[i]=myList[i];
        }
        myList=newList;
    }

}
posted @ 2019-09-28 10:14  申博在线娱乐登入sang_Mu  阅读(...)  评论(...申博在线娱乐登入编辑  申博在线娱乐登入收藏
申博在线娱乐登入
菲律宾申博官网怎么登入 申博娱乐官网 www.shenbo2.com www.6824.com 申博亚洲娱乐官网直营 www.860msc.com
菲律宾太阳城申博 菲律宾网上娱乐登入 申博会员登录 www.9646.com 菲律宾申博游戏直营网 www.shenbo1.com
申博真人娱乐城登入 菲律宾申博开户登入 电子游戏支付宝充值 申博官网登入 申博娱乐网登入 www.22msc.com