概述
线性表
- 声明
- 线性表的定义
- 为什么引入线性表的概念
- 对线性表的操作(串糖葫芦)
- 如何存储?
- 顺序存储和链式存储对比?
- 顺序存储
- 链式存储
声明
本文内容仅为自己学习中的理解,旨在将枯燥的内容以白话的形式表述出来,让自己及想学习数据结构的伙伴更好的理解,如文中有不正确或不准确的说法,还望各位大佬批评留言指正。谢谢
线性表的定义
关于这个概念我们首先抛开软件本身固有的概念,我们先来想想到底什么是线性表(linear list),从中文可能不那么直观,从英文中来理解这个概念其实就是用来描述一个链式的集合,也可以将这个概念类似为糖葫芦,一串糖葫芦是由一个个【山楂】组成的,而此处我们的线性表是由 【数据元素】组成,在Java中,我们将其称之为对象可能更好理解一点。所以此时再来看其定义:
线性表是n个具有相同特性的数据元素的有限序列
而我们就可以把其理解为 没有定义具体对象类型 同类型的一串有限的对象
为什么引入线性表的概念
我的理解其实就是来一步步的将现实的对象一步一步的抽象,最终转化为计算机的内容,不然这么多的事物不能全部用比喻来进行描述
对线性表的操作(串糖葫芦)
进行来看这个概念,现在把线性表类比成糖葫芦,糖葫芦肯定的一个一个穿上去的,那么想象下,我们现在是制作糖葫芦的师傅,在制作过程中,肯定要增加(增),在一些情况下发现个别山楂损坏,一定要对其中坏了的去掉(删)。
同样对比到线性表的操作就很好理解,需要对其中的对象进行操作,即最基础的增删改查操作,这个是最基础的要求,而抽象出来就是线性表的基础要素(一定要注意的是,这几个抽象操作不是唯一的,只是随时本专业的发展,大师们抽象出来的最本质的内容,约定或者称为规定的内容,所以各个语言都有对应的实现语法-其本质思路是一致的)
如何存储?
当我们了解了这个概念之后,接下来需要了解的是现在定义好了这个概念后,那么这些数据对象到底是如何存储的那?如果是糖葫芦,或者其组成原料山楂,我们可以放在冰箱,可以放在任何我们能够放置的位置,但是对于数据如何存放呢?
这个地方先要了解电脑的存储机制,对于电脑而言,我们肯定是将内容放在内存,或者硬盘里,而内存的结构可以了解到,它的存储是连续的,那么我们容易就想到数据直接连续存储不就行了吗?对的这种连续的存储方式,在教材中被称之为 顺序存储
顺序存储:指的是用一段地址连续的存储单元依次存储线性表的数据元素
这个很好,当然的我们最容易想到的方式,也就是我们用多少,直接给内存说:老哥我想要XX大小的内存,你帮我开辟这么多的空间吧,一般情况它就答应你了。
上面的是理想的状态,那么我们想象,会不会存在一种情况就是,内存是间断的呢?如果内存是间断的,同时间断的大小不足以供我们使用怎么办?因此为了这类情况,我们还能想到什么方法呢? 答对了。就是开辟不连续的地址呗,那么这种不联系的内存开辟方式,我们称之为链式存储
链式存储:在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的).
顺序存储和链式存储对比?
顺序存储
优点 | 缺点 |
查询效率高 | 内存每次分配都是固定的 |
各个元素中间插入效率低 | 空间容易浪费 |
链式存储
优点 | 缺点 |
内存随机分配灵活度高 | 查询效率低 |
空间使用率高,不浪费 | 插入删除的速度快 |
在说明一下数据结构和算法其目的的用来定义软件中的各个基本概念的,而各个语言只是其实现的载体,思路都是一样的一定不要局限于说一定要用某某语言来进行数据结构的学习,这也就是为什么数据结构可以用各个语言描述的原因,它是一种思想,而不是一个具体的实现,切记。
下一节,再具体探讨各类线性表的具体表现形式和其不同的性质(单链表、双向链表、环形链表、带哨兵节点的链表),各位看官,我将使用JAVA语言进行描述和实现,敬请期待
。。。未完待续
最后
以上就是陶醉电话为你收集整理的数据结构与算法-线性表的理解【1.1】声明线性表的定义为什么引入线性表的概念对线性表的操作(串糖葫芦)如何存储?顺序存储和链式存储对比?的全部内容,希望文章能够帮你解决数据结构与算法-线性表的理解【1.1】声明线性表的定义为什么引入线性表的概念对线性表的操作(串糖葫芦)如何存储?顺序存储和链式存储对比?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复