数据结构与算法是什么?

简介: 在计算机科学中,数据结构(Data Structure)是计算机中存储、组织数据的方式。为什么数据结构和算法经常放在一起讨论?算法用来设计一种使用计算机来解决问题的方法。设计高效的算法又是怎么来实现的?在我们学习了计算机编程后,也要学习数据结构与算法这些基础内容。


一、数据结构



人们常说:程序 = 数据结构 + 算法,当遇到一个问题,或有一个需求时,在设计程序来解决问题时,其中重要一步就是设计数据结构,数据结构在问题解决中主要用来:

  • 存放要处理的数据
  • 实现算法策略

数据结构可以用一个四元组来表示: 

它包括数据元素(D)、数据元素之间的逻辑关系(L)、逻辑关系在计算机中的存储结构(S)和所规定的操作(O)这四部分。

微信图片6666.png


1. 逻辑结构


逻辑结构是指数据元素之间客观存在的关系,和数据在计算机中怎么存储无关,主要用于人们理解和交流以及指导算法的设计。逻辑结构分为四类:

  • 线性结构:数据元素之间存在一对一的关系
  • 树形结构:数据元素之间存在一对多的关系
  • 图形结构:数据元素之间存在多对多的关系
  • 集合结构:数据元素属于同一个集合

微信图片5555.png

学习研究了这四种逻辑关系是如何存储与操作后,以后我们要解决任何问题,只要分析出要解决问题的数据关系,都可以通过这四种逻辑关系来思考,如果关系比较复杂,也是由这四种关系组成的,只要一层一层地分析就可以了。


2. 存储结构


逻辑结构主要用于算法设计,而存储结构用于指导算法编程实现。存储结构有基本的两种结构:

  • 顺序存储:逻辑上相邻的元素存储在物理位置相邻的存储单元中
  • 链式存储:在数据元素中添加一些地址域或辅助结构,用于存放数据元素之间的关系

微信图片4444.png

顺序存储结构在内存中的地址是连续的,所以存取速度很快,但是在插入或删除操作效率低,因为插入或删除操作会移动数据元素。

链式存储结构在内存中地址可以是不连续的,插入和删除操作效率高,因为增加了寻址的操作,所以查找和遍历效率低。

同样的逻辑结构(线性、树形、图形、集合)既可以采用顺序存储结构也可以采用链式存储结构来存储数据和关系。存储结构的选择主要考虑算法的效率,算法的时间和空间哪个更好,具体选择哪种和需求有关,基本存储结构既可以单独使用,也可以组合使用。

微信图片3333.png


3. 运算操作


数据结构中的操作主要是指数据元素的查找、插入、删除、遍历和排序等等,具体需要实现的操作根据业务需求确定。


二、算法



算法用来设计并实现一种用计算机来解决问题的方法。它满足下列性质:

  • 输入:有零个或多个输入量
  • 输出:产生至少一个输出量
  • 确定性:算法的指令清晰、无歧义
  • 有限性:算法的指令执行次数有限,执行时间有限

微信图片2222.png

在使用计算机解决问题的过程可以分为下面五个步骤:

  1. 问题的理解:搞清楚问题的输入、要求和输出
  2. 数据结构设计:设计能处理问题中数据的数据结构,还要设计能支持算法策略的数据结构
  3. 算法设计:选择算法策略,用适当的方式描述和逐步细化算法步骤
  4. 算法分析:发现有优化的地方,返回第二步,重新设计数据结构和算法
  5. 程序实现:用计算机编程,定义数据结构,编写代码实现,并调试和运行


微信图片1111.png

一个需求问题有多种解决方案,我们经常需要通过不断尝试和积累经验才能找到最好的方案,如果熟练掌握了基本的数据结构和算法,对于在设计高效算法中是有很大帮助的,能更高效地解决需求问题。

目录
相关文章
|
存储
【计算机组成原理】计算机硬件的基础组成、认识各个硬件部件
计算机组成原理(一) 计算机内部是通过电信号传递数据 电信号:分为高电平和低电平,分别代表1/0
607 0
在markdown中添加视频的两种方法
markdown浏览器中如何添加视频呢?两种方式
|
机器学习/深度学习 人工智能 数据挖掘
Python在数据分析中的应用及未来发展趋势
【2月更文挑战第7天】传统的数据分析方法已经无法满足当今大数据时代的需求,Python作为一种高效、灵活的编程语言,在数据分析领域扮演着越来越重要的角色。本文将探讨Python在数据分析中的应用现状,并对其未来发展趋势进行展望。
239 0
|
Web App开发
如何搭建 Scratch 官方网页版?真正意义上的一键安装部署
功能介绍 Scratch 是一款由麻省理工学院(MIT) 设计开发的一款面向少年的简易编程工具,Scratch 已经是少儿编程行业的基础软件。使用 Scratch,你可以编写属于你的互动媒体,像是故事、游戏、动画,然后你可以将你的创意分享给全世界。
8659 0
|
8月前
|
人工智能 自然语言处理 算法
随机的暴力美学蒙特卡洛方法 | python小知识
蒙特卡洛方法是一种基于随机采样的计算算法,广泛应用于物理学、金融、工程等领域。它通过重复随机采样来解决复杂问题,尤其适用于难以用解析方法求解的情况。该方法起源于二战期间的曼哈顿计划,由斯坦尼斯拉夫·乌拉姆等人提出。核心思想是通过大量随机样本来近似真实结果,如估算π值的经典示例。蒙特卡洛树搜索(MCTS)是其高级应用,常用于游戏AI和决策优化。Python中可通过简单代码实现蒙特卡洛方法,展示其在文本生成等领域的潜力。随着计算能力提升,蒙特卡洛方法的应用范围不断扩大,成为处理不确定性和复杂系统的重要工具。
326 21
|
JavaScript 前端开发 UED
深入理解JavaScript中的节流与防抖技术
理解并合理运用节流与防抖技术,可以帮助我们优化事件处理函数的执行频率,从而提升应用的性能和用户体验。这两种技术通过减少不必要的计算和DOM操作,使得Web应用程序能够更加流畅地运行。 通过掌握防抖和节流的实现原理及应用场景,开发者可以更加灵活地编写高效且性能优化的代码,对于面对高频事件处理时尤其重要。在开发中合理选择使用防抖或节流,将直接影响到应用的响应性和效率。
165 1
|
9月前
|
算法 容器
【算法】——双指针算法合集(力扣)
移动零,复写零,快乐数,盛最多水的容器,有效三角形的个数,和为s的两个数(查找总价格为目标值的两个商品 ),三数之和,四数之和
|
11月前
|
机器学习/深度学习 算法
【机器学习】揭秘反向传播:深度学习中神经网络训练的奥秘
【机器学习】揭秘反向传播:深度学习中神经网络训练的奥秘
|
Linux 开发工具
在Linux中,如何创建一个新的分区并格式化为EXT4文件系统?
在Linux中,如何创建一个新的分区并格式化为EXT4文件系统?
|
存储 人工智能 算法
数据安全与隐私保护在人工智能时代的挑战与应对
随着人工智能技术的快速发展,数据安全和隐私保护问题日益凸显。本文将探讨在人工智能时代下,数据安全面临的挑战以及如何有效应对,为保护用户数据和维护信息安全提供新思路。
1742 13