程序员基本功09 线性表
I(Information)信息、T(Technology)技术,编程的本质是对数据的处理。数据结构就是研究数据之间的逻辑关系、存储方式及其操作的学问。
从数据的逻辑结构来分,数据元素之间存在的关系被称为数据的逻辑结构。大致分为四种:
- 集合:数据元素之间只有“同属于一个集合”关系。
- 线性结构:数据元素之间存在一个对一个的关系
- 树形结构:数据元素之间存在一个对多个的关系
- 图形结构或网状结构:数据元素之间存在多个对多个的关系
对于数据不同的逻辑结构,计算机在物理磁盘上通常由2中物理存储结构:
- 顺序存储结构
- 链式存储结构
1、线性表的基本概念
- 对于常用的数据结构,可以将其简单的分为线性结构和非线性结构。其中线性结构主要是线性表,非线性结构则主要是树和图。
- 线性表是由有限个具有相同结构的元素组成的序列。
- 对于一个非空有限的线性表而言,其基本特征有:
- 总存在唯一的第一个数据元素
- 总存在唯一的最后一个数据元素
- 除第一个数据元素外,集合中的每一个数据元素都只有一个前驱的数据元素
- 除最后一个数据元素外,集合中每一个数据元素都只有一个后继的数据元素
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 线性表相关推荐
- Atitit 工程师程序员技术级别对应表与主要特征 P1--p6 说明 类别 职称 对应技术标志 P5 高级工程师 工程师类 一般四五年 P6 资深开发 工程师类 78年经历 P7 P7
Atitit 工程师程序员技术级别对应表与主要特征 P1--p6 说明 类别 职称 对应技术标志 P5 高级工程师 工程师类 一般四五年 P6 资深开发 工程师类 78年经历 P7 P7 一般是技术专 ...
- 程序员健康最佳作息表
说到健康作息,还真是要好好总结一下,都说程序员这一行,猝死概率极高,究其原因还是很难有很好的作息规律. 这里就带来"传说中"的"世界上最健康的作息时间表",随时 ...
- 基本概念_程序员基本功——链表的基本概念
[程序员必须掌握数据结构: 数据结构中必讲链表: 所以,程序员必须掌握链表] 链表是数据元素的线性集合(Linear Collection),物理存储不连续.那么,这种设计的优点是什么?缺点又是什么? ...
- 程序员的能力矩阵表【转载自】
一个挺有意思的程序员能力界定,从程序员能力矩阵转载: 注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识. 计算机科学 Computer Science 2n (Le ...
- 程序员基本功10栈和队列
1.栈的基本概念 栈是一种数据结构,它代表只能在某一段进行插入.删除操作的特殊线性表,通常就是在线性表的末端进行插入.删除操作. 归纳起来就是:栈就是一种后进先出的线性表 2.栈提供的基本方法 栈不允 ...
- JAVA程序员基本功:开发实现类隐藏及应用
转载自:http://www.cn-java.com/www1/?action-viewnews-itemid-68459 原文更精彩! 一.类隐藏的基本建议 虽然在JAVA语言中要实现类的隐藏非常简 ...
- 程序员基本功04JAVA的内存回收
读书笔记自己看的(O_O) 1.Java引用的功能和意义 程序员需要通过关键字new创建Java对象,即可视作为Java对象申请内存空间,JVM会在堆内存中为每个对象分配空间:当一个Java对象失去引 ...
- 程序员基本功03常见JAVA集合的实现细节
笔记笔记自己看的 1.Set和Map的关联之处 Set代表一种集合元素无序.不可重复的集合,Map代表一种由多个键值对组成的集合.Map集合的Key之间不能重复且无序,也就是说,把map里的key单列 ...
- 程序员基本功02对象与内存控制
以下的答案为我自己的读书心得(捏造的答案),如有童鞋不忍直视,还请不吝赐教 1.实例变量属于JAVA对象 2.类变量属于类本身 类体内定义的变量称为成员变量,没有static修饰的为非静态变量或实例变 ...
最新文章
- 正交多项式族(勒让德多项式跟切比雪夫多项式)理论
- 如何通过http从linux下载文件,linux – 我可以通过http验证大量文件下载吗?
- 数字图像处理 python_5使用Python处理数字的高级操作
- 前端学习(3165):react-hello-react之UUID库
- java mybatis分页查询语句_mybatis分页查询的实现(一)
- MySql添加外键报错:Cannot add foreign key constraint
- 我的世界javamod怎么装_你不装绞盘,怎么在越野圈混?
- 浅谈核桃的栽培技术与种植管理方法
- 一个测试的日常:对于python装饰器的理解(个人心得及体会)
- sikuli实现百度云批量离线下载
- c 脚本语言作用,什么是脚本,脚本语言?
- iOS 微信 唤醒客户端失败注册失败需要UniversalLink 的解决方案
- 左边是地狱右边也是地狱_走出教程地狱
- 使用u启动为苹果笔记本重装win7系统教程
- 【中医学】0 绪论 + 1 阴阳五行学说
- Android :高德地图demo
- vue3 使用富文本tinymce-vue
- 运维人员必备的Linux系统命令汇总
- 熊猫tv html5是多少,斗鱼VS熊猫TV 直播网站性能大对比
- java版b2b2c o2o 多租户多商家电子商务之(首页登录界面动态配置)SpringCloud SpringBoot Mybatis Uniapp 分布式商城源码 电子商务源码 社交电商 直播带货
热门文章
- python控件随窗口变化而适配_如何实现python tkinter控件随窗口变化?
- python 多层包多模块_python Modules模块操作
- 画好原理图的几个技巧
- 国产嵌入式操作系统发展思考
- AI人才缺口达百万:做了AI,就一定能拿到高薪offer吗?
- HDLBits答案(14)_Verilog有限状态机(1)
- Nexys4DDR手写数字图像识别
- phplivechat安卓app下载_掌音教师端下载软件-掌音教师版app下载v1.5.1 安卓官方版...
- mysql dba工作笔记pdf_社区专家在线:Oracle数据库、MySQL、Db2 等数据库日常运维故障与性能调优在线答疑...
- android 代码 截取屏幕,如何以编程方式在Android上截取屏幕截图?