线性表的链式存储——顺序表和单链表的对比分析

1,线性表两种实现:

1,顺序表;

2,单链表;

2,问题:

1,如何判断某个数据元素是否存在线性表中?

1,遍历线性表;

2,封装这个遍历操作;

3,遗失的操作 - find:

1,可以为线性表(List)增加一个查找操作;

2,int find(const T& e) const;

1,参数:

1,待查找的数据元素;

2,返回值:

1,>= 0:数据元素在线性表中第一次出现的位置;

2,-1:数据元素不存在;

3,遍历中会有相等和不等操作符,当比较对象是类的时候,需要类继承自 Object,并重写相等和不等操作符;

4,数据元素查找示例:

5,find 查找操作实现:

  1,见第“线性表的链式存储——单链表的实现”中4的实现;

6,建议:

1,如果需要将 DTLib 用于工程中,最好在类的定义时候继承自 Object,这样可以避免编译的错误;

7,时间复杂度对比分析:

8,顺序表的整体时间复杂度比单链表要低,单链表还有使用的价值吗?

1,效率的深度分析:

1,实际工程开发中,时间复杂度只是效率的一个参考指标:

1,对于内置基础类型,顺序表和单链表的效率不相上下(顺序表稍微高一点点);

2,对于自定义类类型,顺序表在效率上低于单链表;

2,插入和删除:

1,顺序表:涉及大量数据对象的复制操作;

1,基础数据类型不相上下;

2,自定义类类型(非常复杂、深拷贝),顺序表非常低效;

2,单链表:只涉及指针操作,效率与数据对象无关;

3,数据访问:

1,顺序表:随机访问,可直接定位数据对象;

1,原生数组,可以直接定位;

2,单链表:顺序访问,必须从头访问数据对象,无法直接定位;

2,工程开发中的选择:

1,顺序表(类型简单、访问多):

1,数据元素的类型相对简单,不涉及深拷贝;

2,数据元素相对稳定,访问操作远多于插入和删除操作;

2,单链表(类型复杂,插删多):

1,数据元素的类型相对复杂,复制操作相对耗时;

2,数据元素不稳定,需要经常插入和删除,访问操作较少;

9,小结:

1,线性表中元素的查找依赖于相等比较操作符(==);

2,顺序表适用于访问需求量较大的场合(随机访问);

3,单链表适用于数据元素频繁插入删除的场合(顺序访问);

4,当数据类型相对简单时,顺序表和单链表的效率不相上下;

原文地址:https://www.cnblogs.com/dishengAndziyu/p/10921895.html

时间: 2024-10-14 08:23:22

线性表的链式存储——顺序表和单链表的对比分析的相关文章

数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

一.简述 [暂无] 二.头文件 1 #ifndef _2_3_part1_H_ 2 #define _2_3_part1_H_ 3 //2_3_part1.h 4 /** 5 author:zhaoyu 6 email:[email protected] 7 date:2016-6-4 8 note:realize my textbook <<数据结构(C语言版)>> 9 */ 10 //----线性表的单链表存储结构---- 11 /** 12 My Code 13 to mak

线性表的链式存储

线性表的链式存储 线性表的链式存储 基本概念 设计与实现 实现代码 优缺点 1. 基本概念 链式存储定义 为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息. 表头结点 链表中的第一个结点,包含指向第一个数据元素的指针以及链表自身的一些信息 数据结点 链表中代表数据元素的结点,包含指向下一个数据元素的指针和数据元素的信息 尾结点 链表中的最后一个数据结点,其下一元素指针为空,表示无后继. 2.设计与实现 在C语言中可以用结构体来定义链

03.线性表(二)链式存储结构.单链表1

链式存储结构.单链表1 1.基本概念 为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置) (1)数据域:存储线性表数据元素数据信息的域称为数据域: (2)指针域:把存储直接后继位置(下一个数据元素的地址)的域称为指针域,指针域中存储的信息为指针或链: (3)结点(Node):由数据域和指针域两部分信息组成数据元素ai的存储映像,称为结点. (4)头指针:把链表中第一个结点的存储

数据结构之线性表(链式存储结构)

线性表的实现分顺序存储结构和链式存储结构 上一节我们主要介绍了顺序存储结构,在最后我们还分别总结了顺序存储结构的优缺点, 对于顺序结构的缺点,我们有没有什么好的解决方法呢? 我们今天要介绍的线性表的链式存储结构就可以很好的解决顺序结构的缺点,一起来看. 顺序结构最大的缺点就是在进行插入和删除操作的时候,如果插入位置不理想,那么我们需要移动大量的元素,那产生这一问题的原因是什么呢? 仔细分析后,我们可以发现在顺序存储结构中,他们相邻的元素的存储位置也是相邻的,我们在申请内存的的时候,是一次性申请一

数据结构开发(5):线性表的链式存储结构

0.目录 1.线性表的链式存储结构 2.单链表的具体实现 3.顺序表和单链表的对比分析 4.小结 1.线性表的链式存储结构 顺序存储结构线性表的最大问题是: 插入和删除需要移动大量的元素!如何解决? 链式存储的定义: 为了表示每个数据元素与其直接后继元素之间的逻辑关系:数据元素除了存储本身的信息外,还需要存储其直接后继的信息. 链式存储逻辑结构: 基于链式存储结构的线性表中,每个结点都包含数据域和指针域 数据域:存储数据元素本身 指针域:存储相邻结点的地址 专业术语的统一: 顺序表 基于顺序存储

数据结构--线性表的链式存储结构

一 线性表的链式存储结构 A.链式存储的定义为了表示每个数据元素与直接后继元素之间的逻辑关系:数据元素除了存储本身的信息外,还需要存储其直接后继的信息图示B链式存储逻辑结构基于链式存储结构的线性表中,每个结点都包含数据域和指针域1.数据域:存储数据元素本身2.指针域:存储相邻结点的地址图示C链表中的基本概念1.头结点--链表中的辅助结点,包含指向第一个数据元素的指针(方便插入和删除)2.数据结点--链表中代表数据元素的结点,表现形式为:(数据元素,地址)3.尾节点--链表中的最后一个数据结点,包

线性表的链式存储(C代码实现)

线性表的链式存储结构 线性表的实现分顺序存储结构和链式存储结构. 上一节我们学学习了线性表的实现分顺序存储结构,并实现解顺序存储的基本操作. 这一节我们来学习线性表链式存储结构,那我们再想象一下我为什么我们要引入链式存储结构,万物存在必有其道理 主要还是因为线性存储结构存在着这样一个问题:当我们需要插入和删除元素时,就必须挪动大量与之无关的元素,因为线性存储结构结点与节点之间的关系是相邻关系,一个节点挨着一个节点 如为了插入或者删除一个元素移动大量的元素,这样就降低了程序运行效率. 当我们引入

《数据结构 - 线性表》链式存储 (单链表)

一:线性表定义 -<数据结构 - 线性表>顺序存储结构 二:为什么要 链式存储 线性表? - 因为在使用 顺序结构 存储方式存储的时候,每次进行 插入/删除 都需要大量移动元素的位置. - 所以设计出一种 存储空间不连续 的存储结构. - 这个线性表可能是这样的(存储位置不固定) -  三:链式存储 定义 -  因为链式存储,不是连续空间,所以需要两个信息 - 一个用于 存储数据元素,也叫做 数据域 - 一个用于 指向 下一个位置 的 指示信息,叫做指针域. - 指针域中存储的信息叫指针/链

线性表的链式存储结构

1 n个结点链结成一个链表,即为线性表的链式存储结构,由于每一个结点只包含一个指针域,因此称为单链表. 链表中第一个结点的存储位置成为头指针,那么整个链表的存取就必须是从头指针开始了. 有时候会在单链表的第一个结点前附设一个结点,称为头结点. 头指针与头结点的区别: 头指针: (1)头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针. (2)头指针具有标识作用,所以常用头指针冠以链表的名字. (3)无论链表是否为空,头指针都不为空.头指针是链表的必要元素. 头结点: (1)