文章目录

  • 顺序表和链表的比较
  • 单链表、循环链表和双向链表的时间效率比较
  • 顺序表和链表的优缺点比较
  • 顺序表和链表的基本操作比较

实现线性表时,用顺序表还是链表好?
顺序表和链表的逻辑结构都是线性结构,都属于线性表。
二者的存储结构不同,顺序表采用顺序存储…(特点,带来的优缺点),链表采用链式存储…(特点,带来的优缺点)。
由于采用不同的存储方式实现,因此基本操作的实现效率也不同。当初始化时,…;当插入一个数据元素时,…;当删除一个数据元素时,…;当查找一个数据元素时,…

顺序表和链表的比较

单链表、循环链表和双向链表的时间效率比较

顺序表和链表的优缺点比较

  • 顺序存储结构的优缺点:

优点
① 存储密度大(结点本身所占存储量/结点结构所占存储量);
② 可以随机存取表中任一元素。
缺点
①在插入、删除某一元素时,需要移动大量元素;
② 浪费存储空间;
③ 属于静态存储形式,数据元素的个数不能自由扩充(大片连续空间分配不方便,改变容量不方便)。

  • 链式存储结构的优缺点:

优点
① 结点空间可以动态申请和释放(离散的小空间分配方便,改变容量方便);
② 数据元素的逻辑次序靠结点的指针来指示,插入和删除时不需要移动数据元素。
缺点
① 存储密变小,每个结点的指针域需额外占用存储空间。当每个结点的数据域所占字节不多时,指针域所占存储空间的比重显得很大。
② 链式存储结构是非随机存取结构。对任一结点的操作都要从头指针依指针链查找到该结点,这增加了算法的复杂度。

存储密度:
存储密度是指结点数据本身所占的存储量和整个结点结构中所占的存储量之比,即:
存储密度 = 结点数据本身占用的空间 / 结点占用的空间总量

一般地,存储密度越大,存储空间的利用率就越高。显然,顺序表的存储密度为1 (100%),而链表的存储密度小于1。

顺序表和链表的基本操作比较

  • 创建

顺序表:
需要预分配大片连续空间。若分配空间过小,则之后不方便拓展容量;若分配空间过大,则浪费内存资源。
静态分配:静态数组,容量不可改变。
动态分配:动态数组(malloc,free),容量可改变,但需要移动大量元素,时间代价高。
链表:
只需分配一个头结点(也可以不要头结点,只声明一个头指针),之后方便拓展。

  • 销毁

顺序表:
静态分配:静态数组,系统自动回收空间。
动态分配:动态数组(malloc,free),需要手动free。
链表:
任何一个节点都是由malloc函数来申请的,销毁链表时需依次删除各个结点(free)。

malloc申请的内存空间属于内存中的堆区,在堆区的内存空间不会由系统自动回收,malloc和free必须成对出现。

  • 增加、删除

顺序表:
插入/删除元素要将后序元素都后移/前移;
时间复杂度O(n),时间开销主要来自移动元素,若数据元素很大,则移动的时间代价很高。

链表:
插入/删除元素只需修改指针即可;
时间复杂度O(n),时间开销主要来自查找目标元素,查找元素的时间代价更低。

  • 查找

顺序表:
按位查找:时间复杂度O(1)
按值查找:时间复杂度O(n),若表内元素有序,可在O(log2n)时间内找到。

链表:
按位查找:时间复杂度O(n)
按值查找:时间复杂度O(n)


【数据结构】线性表4——顺序表和链表的比较相关推荐

  1. Java数据结构与算法_线性表_顺序表与链表

    文章目录 线性表 顺序表 顺序表API设计 顺序表的代码实现 链表 单向链表 双向链表 总结 线性表 概述 线性表是最基本.最简单.也是最常用的一种数据结构. 一个线性表是n个具有相同特性的数据元素的 ...

  2. 数据结构——线性表:顺序表、单链表、双链表(C++)

    内容概要: 1.代码部分: 线性表抽象类 顺序表类 单链表类 双链表类 主函数 2.基本概念及注意事项 代码(测试环境VS2017): //线性表ADT类的定义:ADT_List.htemplate ...

  3. 线性表之顺序表与单链表的区别及优缺点

    这里比较的是基于C语言实现的顺序表与单链表,与其他语言的实现可能会有差异,但我相信语言是相通的,它们的实现机制应该也差不多. 1.What 什么是顺序表和单链表 ①顺序表: 顺序表是在计算机内存中以数 ...

  4. 数据结构与算法(一) 线性表之顺序表

     线性表是一种最简单.最常用的数据结构,根据存储方式可以分为顺序表和链表.  顺序表: 顺序表指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构或顺序映像(sequent ...

  5. 线性表、顺序表和链表,你还分不清?

    摘要:其实说实话,可能很多人依然分不清线性表,顺序表,和链表之间的区别和联系! 本文分享自华为云社区<程序员必会自己设计线性表(顺序表.链表)>,原文作者:bigsai. 前言 其实说实话 ...

  6. java数据结构与算法之顺序表与链表深入分析

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...

  7. mysql 线性表_数据结构-线性表之顺序表

    线性表 (1)逻辑结构和物理结构 物理结构:数据元素在内存中真实的存放次序,有可能是连续存放的,也可能是散落于内存里. 逻辑结构:为了便于描述数据元素之间的关系,我们想象出数据之间应该有某种的对应关系 ...

  8. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置

    <(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...

  9. 数据结构-线性表之顺序表

    线性表包括顺序表和链表(单链表.双链表等),这里我们简单探讨一下线性表中顺序表的基本操作和实现. 线性表其实就是对数组的一个实现,其逻辑上和物理存储上的地址都是连续的(数组的下标是从0开始的,而线性表 ...

  10. 1-2、数据结构线性表之顺序表的基本操作插入、删除、遍历、初始化

    学习需要记录,更需要温习! 上一篇我们总结了什么是线性表,线性表的ADT类型,线性表的两种存储类型顺序存储结构和链式存储结构,今天正式进入线性表的顺序存储结构的总结和归纳,也就是数据结构的线性表的顺序 ...

最新文章

  1. Android onAttach 的使用
  2. UE5蓝图初学课程 Unreal Engine 5: Blueprints for Beginners
  3. 分栏报表-物品清单报表实现
  4. caj文件打不开显示内存不足_caj打开文件内存不足 cad内存不足一键修复
  5. Spring Remoting: Hessian--转
  6. 微服务架构--链路追踪(Nginx篇)
  7. VB:如何选定文件或文件夹
  8. Vista SP1、IIS7,安装ASP.Net 1.1、VS2003、NetAdvantage 2004vol、Sql Server2000全攻略
  9. 【推荐实践】微博在线机器学习和深度学习实践(文末附PPT下载链接)
  10. C++引用计数(reference counting)技术简介(3)
  11. AppBuilder(二)UseStageMarker
  12. jQuery入门教程
  13. Android开发使用一行代码实现点击切换下一张图片
  14. php 判断微信浏览器支付宝,PHP判断是手机端-PC端-微信浏览器
  15. 超详细用实验教你如何配置OSPF
  16. 09-01-28 自助装机
  17. 在CentOS8.4中安装OpenFOAM
  18. 劳动节 | 耕耘美好,创造不凡
  19. 网络技术交流QQ群:46855032
  20. 连十分钟都坚持不了,学长你不行啊!

热门文章

  1. 最基础_负数二进制转换
  2. 利用Shodan和Censys进行信息侦查
  3. java声明一个对象_Java声明对象
  4. H5页面仿微信摇一摇及音频(安卓和苹果)
  5. android怎么变iphone,EasyTouch: 让你的Android秒变“iPhone”
  6. 序列化知识 Parcelable和Serializable
  7. html七牛云图片文件上传,使用Js将文件图片视频上传到七牛云详细教程-Fun言
  8. 一封来自上海市城市运行管理中心的感谢信
  9. 在Neo4j中使用louvain进行图聚类
  10. 如何在react中使用OrgChart?