线性表

线性表(List): 由零个或多个数据元素组成的有限序列

关键:

  • 首先他是一个序列,也就是说元素之间是有先来后到的
  • 若元素存在多个,则第一个无前驱,最后一个无后继,其他元素都有且仅有一个前驱和后继
  • 线性表的数据是有限的
  • 线性表的个数n(n>=0)定义为线性表的长度,当n=0时,称为空表

数据类型: 指一组性质相同的值的集合及定义在此集合上的一些操作的总称

数据类型的分类:

  • 原子类型:不可以再分解的基本类型,例如整型、浮点型、字符型
  • 结构类型:由若干个类型组合而成,是可以再分解的,例如整型数组是由若干整型数据组成的

抽象: 是指抽取出事务具有的普遍性本质

抽象数据类型:

  • 把数据类型和相关操作捆绑在一起
  • 我们对已有的数据类型进行抽象,就有了抽象数据类型
  • 抽象数据类型(Abstract Data Type, ADT)是指一个数学模型及定义在该模型上的一组操作
  • 抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表现和实现无关
  • 抽象数据类型还可以指计算机编程者自定义的数据类型

Operation:

  • InitList(*L):初始化操作,建立一个空的线性表L
  • ListEmpty(L):判断线性表是否为空表,若线性表为空,返回true,否则返回false
  • ClearList(*L):将线性表清空
  • GetElem(L,i,*e):将线性表L中的第i个位置元素值返回给e
  • LocalElem(L,e):在线性表中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号;否则,返回-1表示失败
  • ListInsert(*L,i,e):在线性表中第i个位置插入新元素e
  • ListDelete(*L,i,*e):删除线性表L中第i个位置元素,并用e返回其值

顺序存储结构

线性表的顺序存储结构:

  • 用一段地址连续的存储单元依次存储线性表的数据元素
  • 找个初始地址,通过占位的形式,把一定的内存空间占了,把相同数据类型的数据元素依次放在这块空地中

顺序存储结构封装的三个属性:

  • 存储空间的起始位置
  • 线性表的最大存储容量
  • 线性表的当前长度

顺序存储结构优点:

  • 无需为表中元素之间的逻辑关系而增加额外的存储空间
  • 可以快速的索引表中任意位置的元素

顺序存储结构缺点:

  • 插入和删除需要移动大量元素
  • 当线性表长度变化较大时,难以确定存储空间的容量
  • 容易造成存储空间的碎片

链式存储结构

线性表的链式存储结构:

  • 用一组任意的存储单元存储线性表的数据元素及后继元素的存储地址,这组存储单元可以存在内存中未被占用的任意位置
  • 存储数据元素信息的域叫数据域,存储直接后继位置的域叫指针域,这两部分信息组成数据元素称为存储映像,称为节结点(Node)
  • n个节点链接成一个链表,即为线性表的链式存储结构

单链表:

  • 若链表的每个结点中只包含一个指针域,则叫做单链表
  • 链表中第一个结点的存储位置叫做头指针,最后一个结点指针为空(NULL)

头指针与头结点的异同:

  • 头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针
  • 头指针具有标识作用,所以常用头指针冠以链表的名字(指针变量的名字)

效率:

  • 若我们不知道第i个元素的指针位置,则单链表查找、插入、删除的时间复杂度都是O(n)
  • 若从第i个位置,连续插入10个元素,顺序存储结构每插入一个都是O(n),而链式存储找到第i个位置是O(n),接下来都是O(1)
  • 对于插入或删除数据越频繁的操作,单链表的效率优势就越明显

单链表的整表创建:

  • 他的数据是分散在内存各个地方的,他的增长也是动态的
  • 他所占用的空间大小和位置是不需要预先划分的,可以根据系统情况和需求即时生成
  • 单链表整表创建的算法思路:
    – 声明一节点p和计数器变量i
    – 初始化一空链表L
    – 让L的头结点的指针指向NULL,即建立一个带头结点的单链表
    – 循环实现后继节点的赋值和插入

头插法建立单链表:

  • 头插法从一个空链表开始,生成新结点,读取数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头上,直到结束为止
  • 简单来说,就是把新加进的元素放在表头后的第一个位置
    – 先让新结点的next指向头结点之后
    – 然后让表头的next指向新结点

尾插法建立单链表:

  • 每次都插在链表尾

单链表的整表删除:

  • 在内存中将他释放掉
  • 单链表整表删除的算法思路如下:
    – 声明结点p和q
    – 将第一个结点赋值给p,下一结点赋值给q
    – 循环释放p和将q赋给p的操作

静态链表:

  • 通过数组来做一个类似链表的结构
  • 数组的第一个和最后一个元素的data不存放数据
  • 通常把未使用的数组称为备用链表
  • 数组的第一个元素,即下标为0的那个元素的cur则存放第一个有数值的元素的下标
  • 数组的最后一个元素,即下标为MAXSIZE-1的cur则存放第一个有数值的元素的下标,相当于单链表中的头结点的作用

数据结构和算法———P6 线性表相关推荐

  1. 从零开始学数据结构和算法(二)线性表的链式存储结构

    链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...

  2. 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)

    C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...

  3. rsa算法c语言实现_数据结构与算法之线性表-顺序表实现(C语言版本)

    原文托管在Github: https://github.com/shellhub/blog/issues/52 数据结构与算法之线性表-顺序表实现(C语言版本) 前言 数据结构与算法是一个程序员必备的 ...

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

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

  5. 数据结构和算法基础--线性表

    数据结构和算法基础–线性表 数据结构 = 数据的逻辑结构+数据的存储结构+数据的运算 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-28ek7MfI-164242629 ...

  6. Java数据结构和算法:线性表

    线性表的定义 线性表(linear-list)是最常用最简单的一种数据结构.一个线性表是n (n≥0)个相同类型数据元素的有限序列.记为: L= (a1, a2 , - , an ). 其中,L是表名 ...

  7. 学习笔记-数据结构与算法之线性表

    目录 框架图 线性表 顺序结构 创建线性表 输出验证 获取第i个元素 插入元素到特定位置 删除特定位置元素 整体代码 链式结构 创建链表 输出验证 获取第i个元素 插入元素 删除元素 删除整表 完整代 ...

  8. 数据结构与算法之线性表(超详细顺序表、链表)

    原创公众号:bigsai 文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star 前言 通过前面数据结构与算法基础知识我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容 ...

  9. 《数据结构与算法》——线性表顺序存储结构的插入与删除

    什么是线性表? 线性表是最基本.最简单.也是最常用的一种数据结构.线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列. 线性表中数据元素之间的关系是一对 ...

最新文章

  1. 如果成为一名高级安卓开发_什么是高级开发人员,我如何成为一名开发人员?
  2. 牛妹吃豆子(二维前缀和模板,修改+求和)
  3. Javascript中var that=this;是什么意思(转)
  4. HDU - 6661 Acesrc and String Theory (后缀数组)
  5. zhs16gbk对应mysql_数据库的编码浅谈(ZHS16GBK与US7ASCII)
  6. .Net Core中间件和过滤器实现错误日志记录
  7. .Net 中的反射(序章) - Part.1
  8. 外网访问Vmware虚拟机中的某个服务(如http)
  9. Hello!SCDN
  10. 干货:io流带时间的聊天室【客户端与服务端】
  11. 这款开源神器,让你能在 iPad 上随心所欲写代码!
  12. journalctl命令使用
  13. 醉枕江山第五十二章 公主中的公主
  14. 修图教程:为照片增加云雾效果
  15. CISCO路由器配置完全手册
  16. dede(织梦)待审核定更插件
  17. 熟练掌握R语言的Meta分析全流程和不确定性分析,并结合机器学习等方法讲解Meta分析在文献大数据的延伸应用
  18. 超市零售数据分析-大数据项目
  19. XX软件前端开发面试
  20. 小E开发板wifi音箱一实现PC通过wifi传数据到开发板进行播放

热门文章

  1. jsp漂亮的登录界面源码_【案例+源码】详解MVC框架模式及其应用
  2. linux监控http连接数,zabbix监控linux tcp连接数
  3. C++自学26:联合体(union/17)
  4. excel oss 上传_java实现上传文件到oss(阿里云)功能示例
  5. svn拉取文件合并_svn - SVN - 大象笔记
  6. mysql5好还是8_定投扣款哪天好?周一还是周五,月末还是月初?(定投知识8)...
  7. 第十八篇 JS传参数
  8. zoj 2112 树状数组 套主席树 动态求区间 第k个数
  9. 03-dotnet core创建区域[Areas]及后台搭建
  10. MyEclipse6.5设置