数据结构系列(三)线性表

线性表是什么

零个或多个数据元素的有序序列

线性存储结构

例如

java中的数组,每次都申请固定长度内存空间,并且长度不可变

而arraylist则是长度可变的数组,这是java在底层对数组进行封装,当长度超过原有长度,则会新建一个新的数组,把原有的数组复制过来。当然新的数组的长度也基于默认的扩展算法,当扩展后的数组长度又不够时,再进行之前的操作。所以当能预估出list长度时,初始化最好能指定长度

线性存储结构的优缺点

简单来说就是,查询和替换的时间复杂度为O(1),插入和删除的复杂度为O(n),适合长度不变的操作

线性表的链式存储结构

例如java的linkedlist

链式结构与顺序结构存储的优缺点

静态链表

结合数组和链表的思想,

基于数组的结构,数组中每个元素都包含数据域和游标(类似指针域),游标则指向下一个元素

而静态两个字体现在数组初始化的时候需要分配一个固定大小的空间

不过感觉这种数据结构作用更大的只是其思想,实际应用很少用到

循环链表

应用场景

当一台PC运行多个应用程序时,操作系统通常会把这些程序存入至一个链表,并进行循环遍历,给每个应用程序分配一定的时间来执行。此时循环链表对于OS是很有帮组的,当达到链表尾部时,可以方便的从头部重新开始遍历

双向循环链表

顾名思义,在循环链表的基础上,每个元素都包括前一个元素的指针,好处就是查找某个元素的前驱时不用遍历整个链表,也就是用空间换时间的做法。

时间: 2024-10-17 11:56:11

数据结构系列(三)线性表的相关文章

数据结构学习笔记——线性表的应用

数据结构学习笔记——线性表的应用 线性表的应用 线性表的自然连接 计算任意两个表的简单自然连接过程讨论线性表的应用.假设有两个表A和B,分别是m1行.n1列和m2行.n2列,它们简单自然连接结果C=A*B(i==j),其中i表示表A中列号,j表示表B中的列号,C为A和B的笛卡儿积中满足指定连接条件的所有记录组,该连接条件为表A的第i列与表B的第j列相等. 如:         1 2 3                3 5 A  =  2 3 3         B =  1 6       

数据结构学习笔记——线性表

第2章  线性表 2.1  线性表的类型定义  线性结构的特点是:在数据元素的非空有限集中,(1)存在唯一的一个被称做“第一个”的数据元素:(2)存在唯一的一个被称做“最后一个”的数据元素:(3)除第一个之外,集合中的每个数据元素只有一个前驱:(4)除最后一个外,集合中每个数据元素均只有一个后继. 线性表的类型定义 线性表(linear_list)是最常用的且最简单的一种数据结构.一个线性表是n个数据元素的有限序列.在稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成.在这种情况下

python数据结构之一:线性表

线性表:零个或多个数据元素的有限序列. 咋一看这句话,我也不明白是什么意思,哈哈,举例说明一下吧.去电影院买票时,人们的排队就是一个线性表,有固定的最前一个,固定的最后一个. 张三是其中一个,他的前一个人,和后一个人是确定的单一的. 再如,一个公司里的一个部里有一个领导,多名员工,他们的关系就不是线性表了,有一对多的关系. 那么在python里如何创建线性表呢?如下: L1=["a","b","c","d","e&q

数据结构学习系列之线性表(三)

前言数据结构学习,发现坚持下来比较难,本次学习与上次学习间隔了几个月,不管怎样还是要强迫自己坚持下来. 静态链表 用数组模拟链式结构的线性表,对于没有指针的编程语言,只能使用这种方式来模拟.这是大师们想出来的实现方法,体会大师们的编程思路,站在大师们的肩膀上解决一个又一个的难题.每个节点包含一个游标(数组数字索引),用于指向下个节点,所以静态链表也称为游标链表.规定数组第一个元素为备用链表(未被使用的数组游标,静态链表初始化时,会生成备用链表)的头节点,数组最后一个元素为链表的头节点.当需要插入

数据结构学习系列之线性表(二)

前言 线性表链式存储结构的实现,通过这种方式实现的线性表,简称为链表,这是这篇文章的主题.与顺序存储相对应的是链式存储.链式存储逻辑结构相邻,物理结构可能相邻也有可能不相邻.链式结构的优点有:1.存储空间不限制(操作系统可支持的存储空间范围内):2.插入删除操作不需要移动元素等等.当然链式结构也有缺点,比如每个节点需要维护指向下一个节点的指针:比如需要查找某个节点时,需要从头节点开始查找,时间复杂度O(n)等等.总之,顺序存储以及链式存储各有优缺点,需要根据需求具体情况,选择合适的存储方式.没有

数据结构学习系列之线性表(五)

前言 单向链表查找下一个元素很方便,要查找上一个元素时,需要从头开始向下遍历,很是麻烦.如何解决这个问题呢?使用双向链表结构可以解决这个问题. 双向链表 在单向链表的基础上,增加一个指向上一个节点的指针,这就形成了双向链表结构.因增加了一个指针域,故需要占用更多的内存空间,换就话说,用空间换时间.现在硬件越来越强,而价格越来越低,这种思想的应用案例越来越普遍. 代码实现 1 /** 2 * @desc 双向链表 3 * 4 * @date 2015/08/23 5 * @copyright by

数据结构与算法--线性表系列(循环链表、双向链表)

hello,everybody,今天我们来学习线性表的最后两种形式,循环链表.双向链表.这两种链表,是链式存储结构的不同形式.书归正传,我们先来看看循环链表吧. 大家思考一个问题,我们把线性表各个元素比作下图的路线图上的城市: 我们的线性表各个结点的指针,都是指向唯一的后继结点,线性表的终端结点的指针为空.这样的话,如果我们在南京,我们需要先访问南京右j边的城市,再访问南京左边的城市.根据线性表的结构,我们只能返回上海,从上海依次访问到北京.因为我们的终端结点的指针为空,如果直接访问南京右边的城

数据结构和算法 (二)数据结构基础、线性表、栈和队列、数组和字符串

Java面试宝典之数据结构基础 —— 线性表篇 一.数据结构概念 用我的理解,数据结构包含数据和结构,通俗一点就是将数据按照一定的结构组合起来,不同的组合方式会有不同的效率,使用不同的场景,如此而已.比 如我们最常用的数组,就是一种数据结构,有独特的承载数据的方式,按顺序排列,其特点就是你可以根据下标快速查找元素,但是因为在数组中插入和删除元素会 有其它元素较大幅度的便宜,所以会带来较多的消耗,所以因为这种特点,使得数组适合:查询比较频繁,增.删比较少的情况,这就是数据结构的概念.数据结构 包括

考研系列二-线性表合并

套用系列一的线性表类,又加了三个成员函数: 1 #include <fstream> 2 #include <iostream> 3 #include <cstring> 4 #include <cstdlib> 5 6 using namespace std; 7 8 #define N 100 9 enum Status{success,fail,fatal,range_error,overflow}; 10 11 class List{ 12 priv

数据结构 笔记2 线性表

线性表是最简单,最常用的一种数据结构,它是由n个数据元素(结点)组成的有限序列. 线性表的基本运算 1.置空表 InitList(L) ,构造一个空的线性表L 2.求表长 ListLength(L) ,返回线性表L中元素个数,即表长. 3.取表中第i个元素GetNode(L,i) ,若1 <= i <= ListLength(L) ,则返回第i个元素a[i] 4.按值查找LocateNode(L,x),在表L中查找第一个值为x的元素,并返回该元素在表L中的位置,若表中没有元素的值为x,则返回0