1、线性表

原创 2016年06月02日 11:17:47

线性表:由0个或者多个数据元素组成的有限序列。属于1vs1的关系

强调:

1.首先是序列,元素之间有先后顺序。

2.第一个元素无前驱,最后一个无后继。其它元素都有且一个前驱和后继。

3.线性表是有限的,事实上,无论计算机发展到多强大,它处理的元素都是有限的。


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

例如:很多编程语言的整形,浮点型,字符型 这些就是数据类型。


为什么开辟数据类型?

内存不是无限大的,可以按照数据类型开辟不同的空间。所以可以按照数据类型适应不同的条件。


抽象:指抽像出事物具有普遍性的本质。抽象是思考问题的方式,隐藏了繁杂的细节内容。

例如:计算机计算1+1=2 我们不用考虑计算机内部进行的操作。

抽象数据类型ADT:实质一个数学模型已经定义在该模型上的一组操作。也就是把数据类型和相关操作进行整合,捆绑在一起。

例如:一个3D游戏中定义一个位置,我们就可以抽象出一个(x,y,z)的坐标


抽象数据类型的格式:

ADT 抽象数据类型名

Data

数据元素之间逻辑关系的定义

Operation

操作 (创建,判断为空,清空,删除,插入,返回第I个位置的元素,返回第i个元素的位置)

endADT


线性表的顺序存储结构用一段地址连续的存储单元依次存储线性表的数据。

物理上讲:就是在内存中找个初始地址,然后通过占位的形式,把一定的内存空间给占了,然后把相同数据类型的数据元素一次放在这块空地中。

特点:如果是顺序,即使没有数据,该位置为了连续,空着位置也不会被占用。

属性:起始位置,最大存储容量,线性表的当前长度。

各种编程语言中的数组即是一种线性表。

地址计算方法:loc(ai)=loc(a1)+(i-1)*c,这个地址的时间性能属于o(1),所以速度最快。


线性表的操作算法

插入算法的思路:从最后一个数组元素开始遍历到需要插入的位置,往后移动一个位置

删除算法:从删除的位置开始遍历到最后,向前移动一个位置。

对比时间复杂度。

如果插入和删除的位置都是在最后一个位置:o(1)

都在第一个位置:o(n),n指长度


存和读数据都是o(1),插入和删除都是o(n),所以线性表适合元素个数比较稳定,不经常插入和删除操作。


优点:可以快速的存储表中任意位置的元素,无需为表中元素之间的逻辑关系而增加额外的存储空间。

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



线性表的链式存储结构:

特点:一组在内存中未被占用的任意存储单元。存储数据元素,同时存储它的后继元素的存储地址。

在链式存储结构的存储单元上。我们把存储数据元素信息的域叫做数据域,把存储直接后继位置的与成为指针与。指针域中存储的信息成为指针或链。这两部分组成数据元素称为存储映像,成为结点。

分类:

单链表:头节点数据域无信息但也可以存放链表的长度,头指针冠以链表的名称,是必须存在的



链表的读取:时间复杂度最坏为o(n)

插入:此时要在插入位置的指针做一下改变即可。时间复杂度o(n)

删除:在删除的位置对指针做改变。时间复杂度o(n)

效率对比:从时间复杂度来讲,时间复杂度都是o(n)。效率并没有提升,可是如果插入多条元素,单链表的第一次插入时间复杂度为o(n),以后每一次都是O(1),而顺序存储结构每次都为o(n),很显然,对于插入和删除频繁的操作,单链表的效率就越是明显。


单链表的整体创建:单链表是一个动态生成的过程。从空表的初始状态开始,依次建立。分为头插法和尾插法。


单链表结构与顺序存储结构优缺点:

存储分配方式,时间性能,空间性能三个方面总结。



静态链表:是为了给没有指针的编程语言设计的一种实现单链表功能的方法。


循环链表:将单链表中的终结结点指针由空指针指向头结点,问题就解决了。


判断单链表是否有坏的算法:p,q指针向前走,p一直走,q从头走。只要不相等时,说明存在环。单链表有坏。


双向链表:记单链表的基础上实现相互指针指向。

线性表之顺序表示算法实现(一)

为了准备考研,重拾了数据结构的代码学习,看了大量的代码片段之后,我实在是受不了身为程序狗,不敲代码而去手写代码的烦躁,于是还是将今天晚上的学习内容敲在了编译器里面,重拾对代码最初的热爱。   严蔚敏...
  • sinat_33272094
  • sinat_33272094
  • 2016年09月27日 23:20
  • 440

数据结构与经典算法(一)

数据结构是研究包括数据的逻辑结构、存储结构以及定义在它们之上的一组运算。 第一章、基础知识 1.数据结构的主要研究内容(1)数据结构的逻辑结构。根据应用对象 设计有限元素集合中结点之间的逻辑关系,...
  • qq_25178609
  • qq_25178609
  • 2016年09月01日 17:40
  • 697

实验一:线性表的基本操作

实验一:线性表的基本操作 一、实验目的:   1、熟悉Java 上机环境,掌握Java语言编程方法,熟练运用Java语言实现数据结构设计和算法设计。 2、掌握线性表的顺序存储结构和链式存储结构...
  • qq_32902693
  • qq_32902693
  • 2016年03月30日 15:00
  • 873

数组线性表ArrayList的内部实现

线性表是按顺序存储数据是常用的一种数据结构。大多数线性表的典型操作是: 1,初始化线性表 2,判断表是否为空 3,求线性表的长度 4,读取线性表中的第i个元素 5,查找满足条件的数据元素 ...
  • tuke_tuke
  • tuke_tuke
  • 2015年09月05日 11:19
  • 631

线性表的顺序表示和实现

/*********************************** 线性表的顺序表示和实现 by Rowandjj date 2014/3/27 ********************...
  • RowandJJ
  • RowandJJ
  • 2014年03月27日 22:58
  • 1471

大话数据结构六:特殊的线性表(栈)

1. 什么是栈? 栈(stack)是限定仅在表尾进行插入和删除操作的线性表。 2. 栈的特点: 1.) 栈又称为后进先出(Last In First out)的线性表,栈...
  • xiaopihaierletian
  • xiaopihaierletian
  • 2017年04月14日 18:50
  • 201

线性表(1)普通线性表

线性表 线性表(List):零个或多个数据元素的有限序列 首先明确几个概念 1. 线性表是一个序列,元素之间是有顺序的 2. 若元素存在多个,第一个元素无前驱,最后一个元素无后继,其他每个元素...
  • rocky_03
  • rocky_03
  • 2017年05月09日 22:04
  • 182

线性表的顺序存储结构及该结构的插入与删除

顺序存储定义线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。 顺序存储方式 线性表的顺序存储结构,就是在内存中找了块地儿,通过站位的形式,把一定内存空间给占了,...
  • J_1234567890
  • J_1234567890
  • 2016年05月06日 10:52
  • 3484

线性表的应用1(顺序表的遍历和查找)

已知顺序表L中的数据类型为整型。设计算法将其调整为左右两部分,左边的元素(即排在前面的)均为奇数,右边所有元素(即排在后面的)均为偶数,并要求算法的时间复杂度为O(n),空间复杂度为O(1)。 由于顺...
  • PNAN222
  • PNAN222
  • 2016年04月05日 17:35
  • 889

各类线性表(非常值得一看)

各类线性表(非常值得一看):顺序表,链表,静态链表,块状链表,跳表
  • Li_Ning_
  • Li_Ning_
  • 2016年08月01日 22:53
  • 3176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1、线性表
举报原因:
原因补充:

(最多只允许输入30个字)