码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构-线性表

时间:2019-09-13 17:34:58      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:ali   链接   void   ret   特点   list接口   选择   基于   安全   

  线性表是一种常用的数据结构,通常用来存储数据,存储方式是线性的。常见的线性表有顺序表,

链表等。顺序表是基于数组实现的,链表是通过一个个节点链接而成。线性表具有随机访问的机制,可以

在任意位置插入和删除数据元素。

  C语言实现:

    #define MaxSize 10

    typedef struct{

      char list[MaxSize];

      int capacity; 

    }SequenceList;//ADT定义,字符数组大小10

    void ListInitalize(SequenceList *L){

      L->capacity= 0;//初始化数据元素个数为0

    }

    int Length(SequenceList L){//返回顺序表长度L

      return L.capacity;

    }

    boolean ListInsert(SequenceList *L,int i,char target){//将target插入顺序表L的第i个位置

      if(L->capacity >= MaxSize){

        return false;//表长大于最大容量,无法插入

      else if(i < 0 || i > L->capacity){

        return false;//下标越界

      }else{

        int j ;

        for(j = L->capacity; j > i;j--){//j为表长,从后插入

          L->list[j] = L -> list[j-1];

          L->list[i] = target;//插入

          L -> capacity++;

          return true;

        }

      }

    }

    boolean Delete(SequenceList *L, int i ,char *target){//删除操作

      if(L->capacity < = 0){

        return false;//表已空;

      }else if(i < 0 || i > L->capacity-1){

        return false;//下标越界

      }else{

        *target = L->list[i];

        for(j = i+1; j <= L->capacity-1;j++){

           L->list[j-1] = L->list[j];//往前覆盖

        }

        L->capacity--;//表长减一

        return true;

      }

    }

  在java中顺序表ArrayList是基于数组实现的,继承于AbstractList,实现了List接口,RandomAccess接口,

ArrayList是线程不安全的,由于ArrayList没有实现synchronized锁,当有多个线程对其操作时将会产生错误。

但Collections集合实现了synchronized,使得我们初始化List可以保证线程安全,

   List list = Collections.synchronizedList(new ArrayList(...));

This is best done at creation time, to prevent accidental unsynchronized access to the list:

ArrayList初始化数组的容量是10,当数组超过最大容量时,会生成一个1.5容量的新数组来代替旧的数组。

  而LinkedList是基于链表实现的,实现List,Deque,等接口,因而LinkedList也有双端队列提供的方法,

LinkedList同样是线程不安全的,可以通过

  List list = Collections.synchronizedList(new LinkedList(...));

使得我们初始化List可以保证线程安全。

  比较:顺序表是基于数组实现的,在计算机内存中是占一段连续的内存,而链表是通过一个一个的节点链接起来的,

在计算机内存是离散的。顺序表的查找效率是O(1),我们可以通过下标来定位我们需要查找的元素,链表的查找效率是

O(n),因为链表的存储是离散的。而顺序表插入删除操作效率是O(n),因为我们需要移动插入或删除的一部分元素,而链表

插入删除是O(1),这与其存储特点有关。在需要频繁插入操作时,选择链表更为有效。

数据结构-线性表

标签:ali   链接   void   ret   特点   list接口   选择   基于   安全   

原文地址:https://www.cnblogs.com/binhuang01/p/11517111.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!