攻克数据结构和算法——第二天:线性表

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 问题:已知线性表L a和L b中元素分别按非递减顺序排列,现要求将它们合并成一个新的线性表Lc, 并使得Lc中元素也按照非递减顺序排列。

一,循环单链表


1,在循环单链表中,已知结点的p,则可否从结点p出发找到它的直接前驱结点?该过程的时间复杂度是多少?


可以,时间复杂度为O(n) 方法为


temp=p;
while(p->next!=temp)
{ p=p->next; }

7d365ebc3e9342a78eebd2ab98e2966e.png


循环链表特点:


1.从表中任一结点出发都能访问到表中所有结 点。

2.循环表是对称的,为了判断起始位置,一般要设置头结 点。

头结点的设置也可将空表和非空表的逻辑状态及运算统一起来。

3.循环表的运算和线性链表基本一致, 有时可简化某些运算。


2,为什么在单循环链表中设置尾指针比设置头指针更好?


带头指针的循环链表需要遍历整个数组才能找到尾结点,而带尾指针的循环链表只需要.next就能找到头指针。


3,已知一个线性表,经常做在表尾插入元素和删除表尾元素,试分析下列哪种存储表示法更省时?(顺序表,已知头指针的单链表,已知尾指针的循环单链表,已知头指针循环双向链表,已知头指针的双向链表)


已知一个线性表,经常做在表尾插入元素和删除表尾元素


所以时间复杂度上:


顺序表:O(1)(通过下标在表尾操作)


已知头指针的单链表:O(n)


已知尾指针的循环单链表:O(1)插入,O(n)删除


已知头指针循环双向链表:O(1)


已知头指针的双向链表:O(n)


顺序表和已知头指针循环双向链表都是O(1),但语句上已知头指针循环双向链表要多一些,所以顺序表更省时。


二,合并表


例1:合并线性表


●问题:集合A和B分别用两个线性表L A和LB表示,求A∪B并用线性表LA

表示。

●算法设计:

一思想:从LB中逐一取出元素判该元素是否在LA中,若不在则将该元素插入到LA中。

●细化:到实现程度

一 逐一:从第一个到最后一个,计数型循环,前提是需要知道元素个数

一 如何取出第i个数据元素b?

一 如何判断b;是否已在A中?

一 如果不在A中,怎样实现将b插入?


分析:

一最好情形分析: B为A的前面部分元素:1 +2+... +n= (n+1)*n/2

一最坏情形分析: B∩A为空:m+(m+1).. +(m+n-1)= n*m+(n-1)*n/2


根据前面的对合并线性表的算法分析,有没有可能采用什么

措施进行优化?

答案:选数据元素个数少的作为Lb


例2:合并有序表


●问题:已知线性表L a和L b中元素分别按非递减顺序排列,现要求将它们合并成一个新的线性表Lc, 并使得Lc中元素也按照非递减顺序排列。

●分析:线性表Lc初始为空。依次扫描La和Lb中的元素,比较当前元素的值,将较小值的元素插入Lc的表尾之后,如此反复,直到一个线性表扫描完毕,然后将未完的那个线性表中余下的元素逐个插入到Lc的表尾之后

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
51 1
|
2月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
124 4
|
13天前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
50 20
|
2月前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
2月前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
2月前
|
算法
数据结构之路由表查找算法(深度优先搜索和宽度优先搜索)
在网络通信中,路由表用于指导数据包的传输路径。本文介绍了两种常用的路由表查找算法——深度优先算法(DFS)和宽度优先算法(BFS)。DFS使用栈实现,适合路径问题;BFS使用队列,保证找到最短路径。两者均能有效查找路由信息,但适用场景不同,需根据具体需求选择。文中还提供了这两种算法的核心代码及测试结果,验证了算法的有效性。
112 23
|
2月前
|
算法
数据结构之蜜蜂算法
蜜蜂算法是一种受蜜蜂觅食行为启发的优化算法,通过模拟蜜蜂的群体智能来解决优化问题。本文介绍了蜜蜂算法的基本原理、数据结构设计、核心代码实现及算法优缺点。算法通过迭代更新蜜蜂位置,逐步优化适应度,最终找到问题的最优解。代码实现了单链表结构,用于管理蜜蜂节点,并通过适应度计算、节点移动等操作实现算法的核心功能。蜜蜂算法具有全局寻优能力强、参数设置简单等优点,但也存在对初始化参数敏感、计算复杂度高等缺点。
63 20
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
65 1
|
2月前
|
机器学习/深度学习 算法 C++
数据结构之鲸鱼算法
鲸鱼算法(Whale Optimization Algorithm,WOA)是由伊朗研究员Seyedali Mirjalili于2016年提出的一种基于群体智能的全局优化算法,灵感源自鲸鱼捕食时的群体协作行为。该算法通过模拟鲸鱼的围捕猎物和喷出气泡网的行为,结合全局搜索和局部搜索策略,有效解决了复杂问题的优化需求。其应用广泛,涵盖函数优化、机器学习、图像处理等领域。鲸鱼算法以其简单直观的特点,成为初学者友好型的优化工具,但同时也存在参数敏感、可能陷入局部最优等问题。提供的C++代码示例展示了算法的基本实现和运行过程。
59 0
|
2月前
|
算法 vr&ar 计算机视觉
数据结构之洪水填充算法(DFS)
洪水填充算法是一种基于深度优先搜索(DFS)的图像处理技术,主要用于区域填充和图像分割。通过递归或栈的方式探索图像中的连通区域并进行颜色替换。本文介绍了算法的基本原理、数据结构设计(如链表和栈)、核心代码实现及应用实例,展示了算法在图像编辑等领域的高效性和灵活性。同时,文中也讨论了算法的优缺点,如实现简单但可能存在堆栈溢出的风险等。
60 0