I(Information)信息、T(Technology)技术,编程的本质是对数据的处理。数据结构就是研究数据之间的逻辑关系、存储方式及其操作的学问。

从数据的逻辑结构来分,数据元素之间存在的关系被称为数据的逻辑结构。大致分为四种:

  1. 集合:数据元素之间只有“同属于一个集合”关系。
  2. 线性结构:数据元素之间存在一个对一个的关系
  3. 树形结构:数据元素之间存在一个对多个的关系
  4. 图形结构或网状结构:数据元素之间存在多个对多个的关系

对于数据不同的逻辑结构,计算机在物理磁盘上通常由2中物理存储结构:

  1. 顺序存储结构
  2. 链式存储结构

1、线性表的基本概念

  • 对于常用的数据结构,可以将其简单的分为线性结构和非线性结构。其中线性结构主要是线性表,非线性结构则主要是树和图。
  • 线性表是由有限个具有相同结构的元素组成的序列。
  • 对于一个非空有限的线性表而言,其基本特征有:
  1. 总存在唯一的第一个数据元素
  2. 总存在唯一的最后一个数据元素
  3. 除第一个数据元素外,集合中的每一个数据元素都只有一个前驱的数据元素
  4. 除最后一个数据元素外,集合中每一个数据元素都只有一个后继的数据元素

2、线性表应该提供的基本操作

  • 初始化:通常是一个构造器,用于创建一个空的线性表
  • 线性链表的长度:返回线性表中数据元素的个数
  • 获取指定索引处的元素:
  • 按值查找数据元素的位置:如果存在一个或多个,返回第一个搜索值相等的数据元素索引,否则返回-1
  • 直接插入数据元素:表头插入元素,线性表长度+1
  • 向指定位置插入元素:
  • 删除数据元素:删除表头的数据元素,线性长度-1
  • 删除指定位置的数据元素:
  • 判断线性表是否为空
  • 清空线性表

3、顺序线性表的实现

用一组地址连续的存储单元依次存放线性表的元素。

4、链式线性表的实现

  • 链表采用一组地址任意的存储单元存放线性表中的数据元素,每一个元素里保存下一个数据元素的引用(指针)。
  • 链表在插入、删除数据元素时,比顺序线性表快得多,但是查找一个节点或者访问特定序号的节点比顺序表慢。
  • 使用链表结构可以克服顺序线性表需要预先知道数据大小的缺点,链表结构可以充分利用计算机空间,实现灵活的内存动态管理。但是链表结构失去了数组随机存取的特点,同时链表由于增加了节点的指针域,空间开销比较大。
  • 链表的每一个节点必须包含数据元素本身和一个或俩个节点的引用。

5、单链表

单链表指的是每个节点只保留一个引用,该引用指向当前节点的下一个节点,没有引用节点指向头节点,为节点的next引用为null;

动态建立单链表有两种方法:

  • 头插法建表:从一个空表开始,不断地创建新节点,将数据元素存入节点的data域中,然后不断地以新节点为头节点,让新节点指向原有头节点
  • 尾差法建表:将新节点插入到当前链表的表尾上,因此需要为链表定义一个引用变量来保存链表的最后一个节点。

6、循环链表

循环链表是一种首尾相接的链表,将单链表的尾节点next指针改为引用单链表hearder节点,这个单链表就是循环链表。

显著特征就是:从链表的任一节点出发均可找到其他所有节点

7、双向链表

如果每个节点保留俩个引用prev和next,让prev指向当前节点的上一个节点,让next指向当前节点的下一个节点,此时链表既可以从后依次访问每个节点,也可以从前依次访问每个节点,这种形式的链表称为双向链。它克服了单链表上指针单向性的缺点。

8、不同线性表的实现差异

  顺序表 链表
空间性能

顺序表的存储空间是静态分布的,需要一个长度固定

的数组,因此总有部分数组元素被浪费

链表的存储空间是动态分布的,因此不会空间浪费。但链表需要格外的空间来为每个节点保存指针,需要占用一部分空间。
时间性能 顺序表中的元素的逻辑顺序与物理存储顺序保持一致,而且支持随机存取。因此查找和读取时性能好 链表采用链式结构来保存表内元素,因此插入和删除时性能较好。

9、线性表的基本功能

线性表本质上是一个充当容器的工具类,当程序有一组结构相同的数据元素需要保存时,可以考虑使用线性表来保存它们。从某种程度来说,线性表是数组的加强,线性表比数组多如下功能:

  • 线性表的长度可以动态改变,但Java数组的长度是固定的;
  • 线性表可以插入元素,数组无法插入元素;
  • 线性表可以删除元素,数组无法删除元素,数组只能将指定元素赋值为null,当各种元素依然存在;
  • 线性表提供方法来搜索指定元素的位置,但数组一般不提供该方法;
  • 线性表提供方法来清空所有元素,数组一般不提供类似方法。

10、Java提供的线性表的实现

ArrayList和LinkedList

程序员基本功09 线性表相关推荐

  1. Atitit 工程师程序员技术级别对应表与主要特征 P1--p6 说明 类别 职称 对应技术标志 P5 高级工程师 工程师类 一般四五年 P6 资深开发 工程师类 78年经历 P7 P7

    Atitit 工程师程序员技术级别对应表与主要特征 P1--p6 说明 类别 职称 对应技术标志 P5 高级工程师 工程师类 一般四五年 P6 资深开发 工程师类 78年经历 P7 P7 一般是技术专 ...

  2. 程序员健康最佳作息表

    说到健康作息,还真是要好好总结一下,都说程序员这一行,猝死概率极高,究其原因还是很难有很好的作息规律. 这里就带来"传说中"的"世界上最健康的作息时间表",随时 ...

  3. 基本概念_程序员基本功——链表的基本概念

    [程序员必须掌握数据结构: 数据结构中必讲链表: 所以,程序员必须掌握链表] 链表是数据元素的线性集合(Linear Collection),物理存储不连续.那么,这种设计的优点是什么?缺点又是什么? ...

  4. 程序员的能力矩阵表【转载自】

    一个挺有意思的程序员能力界定,从程序员能力矩阵转载: 注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识. 计算机科学 Computer Science   2n (Le ...

  5. 程序员基本功10栈和队列

    1.栈的基本概念 栈是一种数据结构,它代表只能在某一段进行插入.删除操作的特殊线性表,通常就是在线性表的末端进行插入.删除操作. 归纳起来就是:栈就是一种后进先出的线性表 2.栈提供的基本方法 栈不允 ...

  6. JAVA程序员基本功:开发实现类隐藏及应用

    转载自:http://www.cn-java.com/www1/?action-viewnews-itemid-68459 原文更精彩! 一.类隐藏的基本建议 虽然在JAVA语言中要实现类的隐藏非常简 ...

  7. 程序员基本功04JAVA的内存回收

    读书笔记自己看的(O_O) 1.Java引用的功能和意义 程序员需要通过关键字new创建Java对象,即可视作为Java对象申请内存空间,JVM会在堆内存中为每个对象分配空间:当一个Java对象失去引 ...

  8. 程序员基本功03常见JAVA集合的实现细节

    笔记笔记自己看的 1.Set和Map的关联之处 Set代表一种集合元素无序.不可重复的集合,Map代表一种由多个键值对组成的集合.Map集合的Key之间不能重复且无序,也就是说,把map里的key单列 ...

  9. 程序员基本功02对象与内存控制

    以下的答案为我自己的读书心得(捏造的答案),如有童鞋不忍直视,还请不吝赐教 1.实例变量属于JAVA对象 2.类变量属于类本身 类体内定义的变量称为成员变量,没有static修饰的为非静态变量或实例变 ...

最新文章

  1. 正交多项式族(勒让德多项式跟切比雪夫多项式)理论
  2. 如何通过http从linux下载文件,linux – 我可以通过http验证大量文件下载吗?
  3. 数字图像处理 python_5使用Python处理数字的高级操作
  4. 前端学习(3165):react-hello-react之UUID库
  5. java mybatis分页查询语句_mybatis分页查询的实现(一)
  6. MySql添加外键报错:Cannot add foreign key constraint
  7. 我的世界javamod怎么装_你不装绞盘,怎么在越野圈混?
  8. 浅谈核桃的栽培技术与种植管理方法
  9. 一个测试的日常:对于python装饰器的理解(个人心得及体会)
  10. sikuli实现百度云批量离线下载
  11. c 脚本语言作用,什么是脚本,脚本语言?
  12. iOS 微信 唤醒客户端失败注册失败需要UniversalLink 的解决方案
  13. 左边是地狱右边也是地狱_走出教程地狱
  14. 使用u启动为苹果笔记本重装win7系统教程
  15. 【中医学】0 绪论 + 1 阴阳五行学说
  16. Android :高德地图demo
  17. vue3 使用富文本tinymce-vue
  18. 运维人员必备的Linux系统命令汇总
  19. 熊猫tv html5是多少,斗鱼VS熊猫TV 直播网站性能大对比
  20. java版b2b2c o2o 多租户多商家电子商务之(首页登录界面动态配置)SpringCloud SpringBoot Mybatis Uniapp 分布式商城源码 电子商务源码 社交电商 直播带货

热门文章

  1. python控件随窗口变化而适配_如何实现python tkinter控件随窗口变化?
  2. python 多层包多模块_python Modules模块操作
  3. 画好原理图的几个技巧
  4. 国产嵌入式操作系统发展思考
  5. AI人才缺口达百万:做了AI,就一定能拿到高薪offer吗?
  6. HDLBits答案(14)_Verilog有限状态机(1)
  7. Nexys4DDR手写数字图像识别
  8. phplivechat安卓app下载_掌音教师端下载软件-掌音教师版app下载v1.5.1 安卓官方版...
  9. mysql dba工作笔记pdf_社区专家在线:Oracle数据库、MySQL、Db2 等数据库日常运维故障与性能调优在线答疑...
  10. android 代码 截取屏幕,如何以编程方式在Android上截取屏幕截图?