数据结构-线性表

线性表是最简单的一种数据结构,何为线性表?简单来说就是数据元素之间是“一对一”的逻辑关系,除了第一个元素没有前驱,最后一个元素没有后继,中间元素都有且只有一个前驱和一个后继,当然这并不是绝对的,例如:双向链表和循环链表也都是线性表。

  • 线性表在计算机中存储结构有顺序存储和链式存储两种存储结构,顺序存储成为顺序表,链式存储分为单向链表,双向链表,循环链表。
  • 线性表的一些基本操作
    clear(),isEmpty(),length(),get(i),insert(i,x),remove(i),indexof(x)(线性表中首次出现x元素的位序号),display()(输出线性表中各个元素的值)

顺序表

顺序表即为存储结构为顺序存储的线性表,所谓顺序存储即线性表中的元素存储单元是连续的。
顺序表又有以下特点:
1.线性表中逻辑上相邻的两个元素,在物理存储位置上也是相邻的;
2.顺序表是用数组来实现的,故需要预先分配存储空间,一定程度上会造成存储空间的浪费;
3.不方便元素的删除插入,会造成大量数据的移动。
4.方便根据序位号查找元素

链表

链式存储结构的线性表即为链式表,分为单向链表,双向链表,循环链表。
链表的结点中分为数据域和指针域,数据域的每个结点中存放着链表的数据元素,指针域中指针指向逻辑上相邻的结点的指针域。若每个结点只有一个指针域则为单链表,有两个指针域则为双向链表,若单链表的首位相连则为循环链表。
以单链表为例:
单链表中的数据元素通过每个结点指针指向下一个结点的指针域的形式连成一个链,链表的第一个结点的存储地址为链表的起始地址,称为头指针,故只要知道头指针就可以知道链表中的所有数据元素,所以头指针作为单链表的唯一标识。如此单链表的第一个结点的数据元素就无法访问到,故在链表前面虚加一个“头结点”,数据域不放元素,指针域指向第一个结点,指向头结点的指针称为头指针。
对比顺序表链表有以下特点:
1.逻辑上上相邻的元素,物理位置不相邻;
2.不需要预先分配存储空间,只需设置一个头指针即可
3.方便进行添加删除操作
4.不能直接根据序位号查找元素
5.对比顺序存储,链表的空间利用率较低

VS

对比顺序表和链表,两者各有优缺点:
(1)链表动态分配存储空间,顺序表需要预先分配存储空间,故链表适用于线性表长度变化较大,长度无法估计的情况,顺序表适用于长度变化较小,长度基本可以预估的情况;
(2)根据序号号查找元素,链表需要从头指针开始查找,空间复杂度为O(n),而顺序表可以直接根据序号获取,空间复杂度为O(1);
(3)进行插入删除操作时,顺序表需要移动数据,而链表不需要移动任何数据;
(4)链表较灵活,但空间利用率低,适合实现动态的线性表,顺序表不易扩充,但空间利用率高,适合实现静态的线性表。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性表是一种常见的数据结构,它表示具有相同数据类型的一组元素的有序序列。线性表的元素之间存在一种顺序关系,每个元素都有一个前驱和一个后继(除了第一个元素没有前驱,最后一个元素没有后继)。线性表可以用顺序存储结构或链式存储结构实现。 在顺序存储结构线性表的元素按照顺序存储在连续的内存空间,可以通过元素的下标来访问和操作元素。插入或删除元素时,需要移动其他元素,因此操作的时间复杂度较高。 链式存储结构线性表的每个元素都包含一个数据域和一个指针域,指针指向下一个元素。通过指针的链接,元素可以按照任意顺序存储在内存,插入和删除操作只需要改变指针的指向,因此时间复杂度较低。 线性表常见的操作包括插入、删除、查找、获取长度等。其插入和删除操作需要注意保持线性表的顺序关系。 常见的线性表数组、链表、栈和队列。数组是最简单的线性表,通过下标可以直接访问元素;链表是动态存储结构,插入和删除操作方便,但访问元素需要遍历链表;栈是一种特殊的线性表,只允许在表的一端进行插入和删除操作;队列也是一种特殊的线性表,只允许在表的一端进行插入操作,在另一端进行删除操作。这些数据结构在实际应用都有各自的应用场景和优缺点。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值