线性结构-线性表

线性表的定义

线性表是最简单、最常用的一种数据结构。是由n(n≥0)个数据元素(结点)a1,a2,…,an组成的有限序列。对于非空的线性表:

  • 有且仅有一个开始结点a1,没有直接前趋,有且仅有一个直接后继a2;
  • 有且仅有一个终结结点an,没有直接后继,有且仅有一个直接前趋an-1;
  • 其余的内部结点ai(2≤i≤n-1)都有且仅有一个直接前趋ai-1。
  • 其余的内部结点ai(2≤i≤n-1)都有且仅有一个后继结点ai+1。

线性表的分类(按存储结构)

根据存储结构的不同,线性表分为顺序表和链表。

顺序表:用把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法存储的线性表简称为顺序表。顺序表是用向量实现的线性表,向量的下标可以看作结点的相对地址。因此顺序表的的特点是逻辑上相邻的结点其物理位置亦相邻。

优点是存储空间的利用率高,存取速度快。缺点是无论是插入一个结点,还是删除一个结点,都要调整一批结点的地址。

链表:为了避免顺序表插入和删除的线性开销,我们需要保证表可以不连续存储。链表由一系列结点组成,这些结点不必在内存中连续,每一个结点包括实际数据和其后继结点的地址,通过这些地址将所有结点串起来,就形成了链表。其插入、删除操作就只需改变响应结点的地址即可。

以上描述的链表为单链表(默认就称为链表),如果结点不仅包括后继结点地址,而且包括前驱结点地址,那么称为双向链表。双链表较之单链表更方便链表的遍历(可以由后向前遍历)。

java中的线性表

在java的集合包中对顺序表和链表进行了实现,分别是ArrayList和LinkedList。结合顺序表和链表的特点,可以分析ArrayList和LinkedList的区别:

  • ArrayList基于动态数组方式,LinkedList基于双向链表实现;
  • ArrayList的存取要优于LinkedList,因为LinkedList需要移动指针;
  • LinkedList的插入、删除要优于ArrayList,因为ArrayList需要移动数据。

转载于:https://my.oschina.net/shenhuniurou/blog/917907

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值