5.顺序存储 + 链式存储

这节以下面的脑图展开讲解。在这里插入图片描述

顺序存储:顺序存储结构是存储结构类型中的一种,该结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。

链式存储:链式存储结构,又叫链接存储结构。在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)


顺序表

定义
直接去看 百度百科一分钟小视频

增删改查
在这里插入图片描述

  • 插入元素
    (1)在最前面插入元素 E,将 D 移到 下标为 4 的位置,再将 C 移到下标为 3 的位置,再将 B 移到下标为 2 的位置,再将 A 移到下标为 1 的位置,最后将E 放到下标为 0 的位置 。
    (2)在 B,C 之中插入元素 E ,将 D 移到 下标为 4 的位置,再将 C 移到下标为 3 的位置,再将E 放到下标为 2 的位置 。
    (3)在最后面插入元素 E,在 D 之后插入 E,直接将E 放到下标为 4 的位置 。
  • 删除元素
    (1)删除最前面的元素 A,然后将 B 移到下标为 0 的位置,将 C 移到下标为 1 的位置,将 D 移到下标为 2 的位置
    (2)删除中间元素,删除 B ,然后将 C 移到下标为 1 的位置,将 D 移到下标为 2 的位置
    (3)删除最后面的元素 D,直接删除
  • 修改元素
    将 B 改为 E ,直接改
  • 查询元素
    找 C ,那就从下标为 0 的位置开始找,一个一个比对

优点

  1. 结构简单
  2. 可以直接定位到表中任一元素,因为有下标。并可随机存储元素
  3. 连续存取速度快

缺点

  1. 存储空间难于分配,大了浪费,小了不够。
  2. 插入,删除 元素操作不方便,需要移动大量数据元素,效率低

练习题
1.在一个长度为n的顺序存储的线性表中,向第i个元素(1≤i≤n+1)位置插入一个新元素时,需要从后向前依次后移()个元素。(代入法)
A.n-i               B.n-i+1               C.n-i-1            D.i

2.在一个顺序表的表尾插入一个元素的时间复杂度的量级为( )。
A.O(n)            B.O(1)               C.O(n*n)          D.O(lbn)

3.一个向量(即一批地址连续的存储单元)第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( ) 。
A.110             B.108                C.100                D.120


单链表

定义
直接去看 百度百科一分钟小视频,不懂指针的可以先去看 指针— 快捷方式 + 买芬达
在这里插入图片描述

增删改查

  • 插入元素
    (1)头插法,将 a 4 插在 a1 之前:q -> next = p -> next ,p -> next = q在这里插入图片描述
    (2)尾插法,将 a 5 插在 a3 之后:q -> next =p -> next,p -> next = q在这里插入图片描述
    (3)中间插入同理,先关注插入元素后面的结点,再关注插入元素前面的结点。

  • 删除元素
    删除a1:p -> next =p -> next -> next
    在这里插入图片描述

  • 修改元素
    从头节点开始一个一个找,找到直接改

  • 查询元素
    从头节点开始一个一个找

优点

  1. 存储空间动态分配,按需使用
  2. 插入 、删除 结点操作时通常只要修改指针,不必移动数据元素

缺点

  1. 每一个结点都附加一个指针域
  2. 非随机存储结构,查找定位操作需从头指针出发顺着链表扫描

练习题
1.非空的循环单链表head的尾结点(由p所指向)满足( ) 。
A.p->next == NULL                      B.p == NULL
C.p->next == head                        D.p == head

2.在有n个节点的单链表中,删除指定节点的前趋的时间复杂度是( ) 。
A.O(1)                            B.O(n)
C.O(n2)                          D.O(n3)

3.在非空线性链表中由p所指的链节点后面插入一个由q所指的链节点的过程是依次执行动作()。
A.q->next=p; p->next=q;                        B.q->next=p->next; p->next=q
C.q->next=p->next; p=q;                        D.p->next=g;q->next=p;

双链表

定义
直接去看 百度百科一分钟小视频
在这里插入图片描述

增删改查

  • 插入元素
    a4 插入到 a1 和 a2 之间:(1) q -> next = p -> next,q -> prior = p
    (2) p -> next -> prior = q (3) p -> next = q
    在这里插入图片描述

  • 删除元素
    将 a2 删除 :p -> prior ->next = p -> next,p -> next -> prior = p ->prior
    在这里插入图片描述

  • 修改元素
    从头节点开始一个一个找,找到直接改

  • 查询元素
    从头节点开始一个一个找

练习题
1.在双向循环链表中,在指针p指向的结点前插入一个由指针q指向的新结点,其修改指针的操作是()[注:双向链表的结点结构为(llink, data, rlink)]
A.p->llink=q; q->rlink=p;p->llink-link=q;q->llink=q;
B.p->llink=q;p->llink-rlink=q;q->rlink=p;q->llink=p-llink;
C.q->rlink=p;q->llink=p->llink;p->llink->rlink=q;p->llink=q;
D.q->llink=p->llink;q->rlink=p;p->llink=q; p->llink->rlink=q;

2在双向链表存储结构中,删除p所指的结点时须修改指针( ) 。
A.p->prior->next=p->next;p->next->prior=p->prior;
B.p->prior=p->prior->prior;p->prior- >next=p;
C.p->next->prior=p;p->next=p->next->next
D.p->next=p->prior->prior;p->prior=p->next->next;

静态链表

定义

练习题
1.线性表的静态存储结构与顺序存储结构相比,优点是( ) 。
A.所有的操作算法实现简单                 B.便于随机存取
C.便于插入和删除                               D.便于利用零散的存储器空间

⒉.需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是()。
A.单链表         B.静态链表          C.线性链表吗           D.顺序存储结构

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头疼小宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值