数据结构前言:概念与算法

数据结构

数据是信息的载体,信息化的社会离不开数据
数据结构是为了管理数据而存在的。
数据结构名称本身表明在内存中组织数据。内存中数据的组织方式有很多种,比如我们熟悉的一种数据结构,即C语言中的数组。数组是存储元素的集合,其中数据按顺序存储,即一个接一个。换句话说,我们可以说数组以连续的方式存储元素。这种数据组织是在数据结构数组的帮助下完成的。还有其他方法可以在内存中组织数据。

数据元素

数据结构三要素

逻辑结构、数据运算、物理结构

数据逻辑结构分类

堆:穷人与富人、疫情高风险与低风险地区
线性结构(1v1):排名
树状结构(1v多):公司组织图、文件夹与文件
网状结构(多v多):好友圈
在这里插入图片描述

数据的运算

结合逻辑结构、实际需求来定义基本运算
运算的定义是针对逻辑结构的,而实现是针对存储结构的
线性结构:
1.在排行中查找第i个数据元素 (年度Top10抖音热歌)
2.在排行中第i个位置插入新的数据元素 (黑马晋升流量明星)
3.删除排行中第i个位置的数据元素 (昔日顶流已凉凉,从次查无此人)

物理结构(存储结构)

在计算机上如何实现上述的定义的逻辑结构?
本质:怎么样表示数据元素之间的逻辑结构?
数据的存储结构分类:顺序存储和离散存储

顺序存储要求各个数据元素在物理上的位置必须是连续的,而离散存储各个数据元素在物理空间上可以不连续;
数据的存储结构会影响存储空间分配的方便程度
数据的存储结构会影响数据运算的速度

顺序存储:
把逻辑上相邻的元素存储在内存上(物理位置)相邻的存储单元中。
想象:111班的10个女同学按学号顺序居住在5公寓的1-10号房间。

以下都是非顺序存储结构
链式存储:
逻辑上数据元素虽然相邻,但是在内存上(物理位置)位置可以不相邻,借住指针来链接不相邻的物理位置,反应元素之间的逻辑关系
索引存储:
存储的位置可以不连续,在存储的同时还需建立一个附加的索引表,索引表由索引项构成,一般形式是(关键字,地址)
想象:楼下宿管阿姨那里有一张表,栏一是11班的10个女同学的学号,栏二是对应的公寓号,因此只需要知道学号就知道这个女同学在哪个房间。
散列存储:
根据元素的关键字直接计算出存储位置,也叫做哈希(Hash)存储

算法的概念

什么是算法?

有这样一种说法 : 程序 = 数据结构 + 算法。
算法就是如何高效的处理数据来解决实际的问题。
算法的定义是它包含以特定顺序执行以执行特定任务的有限指令集。它不是完整的程序或代码;它只是问题的解决方案(逻辑),可以使用流程图或伪代码表示为非正式的描述。

算法的特征

  • 输入:算法有一些输入值,我们可以将输入值传递给算法。
  • 输出:我们将在算法结束时获得 1 个或多个输出。
  • 有穷性:算法应该具有有限性。这里,有限性意味着算法应该包含有限数量的指令,即指令应该是可数的。
  • 明确性:算法应该是明确的,这意味着算法中的指令应该清晰简单。
  • 语言无关:算法必须与语言无关,以便算法中的指令可以在具有相同输出的任何语言中实现。

好算法的特点

  • 模块化:如果给定任何问题,我们可以将问题分解为小模块或小步骤,这是算法的基本定义,这意味着该功能已为算法完美设计。
  • 正确性:算法能正确解决问题
  • 可读性:好的可读性能够帮助人们理解
  • 健壮性:输入非法数据时,算法能处理,不会产生非法结果
  • 可维护性:这里的可维护性意味着算法应该以非常简单的结构化方式设计,这样当我们重新定义算法时,算法不会发生重大变化。
  • 功能:它考虑解决现实世界问题的各种逻辑步骤。
  • 简单性:如果算法简单,那么它很容易理解。
  • 高效率和低存储量:执行时间少,并且不会占用大量内存

算法复杂度

  • 时间复杂度:算法的时间复杂度是完成执行所需的时间量。算法的时间复杂度用大O 符号表示。这里,大O符号是表示时间复杂度的渐近符号。时间复杂度主要通过计算完成执行的步骤数来计算。
常用的5种大O运行时间
O(log n) :也叫对数时间,比如二分查找
O(n) :也叫线性时间,比如简单查找
O(nlog n) :比如快速查找
O(n2) :比如选择排序
  • 空间复杂度:算法的空间复杂度是解决问题并产生输出所需的空间量。与时间复杂度类似,空间复杂度也用大O符号表示。空间复杂度需要了解递归函数调用的堆栈,因此也说空间复杂度 = 递归调用的深度

算法类型

一下两个其实就是算法的类型
搜索算法排序算法

搜索算法

每一天,我们都在寻找日常生活中的某些东西。类似地,在计算机的情况下,大量数据存储在计算机中,每当用户要求任何数据时,计算机就会在内存中搜索该数据并将该数据提供给用户。主要有两种技术可用于搜索数组中的数据:

  • 线性搜索:线性搜索是一种非常简单的算法,它从数组的开头开始搜索元素或值,直到找不到所需的元素。它将要搜索的元素与数组中的所有元素进行比较,如果找到匹配项,则返回元素的索引,否则返回 -1。该算法可以在未排序列表上实现。
  • 二分查找:二元算法是最简单的算法,可以非常快速地搜索元素。它用于从排序的列表中搜索元素。元素必须按顺序或排序方式存储以实现二进制算法。如果元素以随机方式存储,则无法实现二分查找。它用于查找列表的中间元素。
排序算法

排序算法用于按升序或降序重新排列数组或给定数据结构中的元素。比较运算符决定元素的新顺序。

为什么需要排序算法?
需要一种高效的排序算法来优化其他算法(如二分搜索算法)的效率,因为二分搜索算法需要按特定顺序对数组进行排序,主要是按升序排序。
它以排序的顺序生成信息,这是一种人类可读的格式。
在排序列表中搜索特定元素比未排序列表更快。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kxwang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值