当前位置: 首页 > article >正文

数据结构和算法简介 以及 顺序表

数据结构和算法简介

一, 数据结构和算法的定义

数据结构的定义:

概述:

就是存储和组织数据的方式, 分为:线性结构和非线性结构.

算法的定义:

概述:

就是解决问题的思路和方法, 它具有独立性, 即,:它不依赖语言,而是解决问题的思路.Java能做Python也能做

特性:
  • 有输入
  • 有输出
  • 有穷性
  • 确定性
  • 可行性

二, 算法的时间效率衡量

时间复杂度的定义

时间复杂度表示一个算法随着问题规模不断变化的最主要趋势,通常用来衡量一个算法的优劣
懂俗点来说时间复杂制度可以衡量一个"算法的量级"

如何衡量算法的优劣

大0标记法, 即:将次要条件都省略掉,最终形成1个表达式.
主要条件:随着问题规模变化而变化的.
次要条件:随着问题规模变化而不变的.
图解:
在这里插入图片描述

最优和最坏时间复杂度

如非特殊说明,我们考虑的都是最坏时间复杂度,因为它是算法的一种保证
而最优时间复杂度是算法的最理想,最乐观的状况,没有太大的参考价值.

常见的时间复杂度如下

从最优到最坏分别是:
0(1) -> o(logn) -> o(n) -> o(nlogn) -> o(n²) -> o(n³)
常数阶 -> 对数阶 -> 线性阶 -> 线性对数阶 -> 平方阶 -> 立方阶

扩展:常见的空间复杂度如下

了解即可,因为服务器(内存)资源一般是足够
从最优到最坏分别是:
o(1) -> o(logn) -> o(n) -> o(n²) -> o(n³)

三, 数据结构的分类

数据结构=存储,组织数据的方式,是算法解决问题时的载体

  • 线性结构
    特点:每个节点都只能有1个前驱1个后继节点
    例如:栈, 队列
  • 非线性结构
    特点:每个节点都可以有多个前驱,多个后继节点
    例如:树, 图在这里插入图片描述

四, 线性结构存储数据的方式

在这里插入图片描述

(1)顺序表的存储方式

顺序表的定义

将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示
解释: 顺序表有 数据区信息区 两部分组成.

特点

  • 数据区和信息区在一起的 ->一体式存储(扩容时只能整体搬迁)

    • 图解:
      在这里插入图片描述
  • 数据取货和信息区分开存储的 ->分离式存储(可以直接让信息区指向新的 数据区即可, 不用整体搬迁 ).

    • 图解
      在这里插入图片描述

顺序表扩容策略

思路1:每次增加固定的容量. 拿时间换空间

思路2:每次扩容,容量翻倍. 拿空间换时间

(2)链表的存储方式

五, 总结

  • Q1:数据结构和算法的定义?
    • 数据结构的定义:就是存储和组织数据的方式, 分为:线性结构和非线性结构.
    • 算法的定义:就是解决问题的思路和方法, 它具有独立性, 即,:它不依赖语言,而是解决问题的思路.Java能做Python也能做
  • Q2: 时间复杂度的定义?
    • 时间复杂度表示一个算法随着问题规模不断变化的最主要趋势,通常用来衡量一个算法的优劣.
    • 懂俗点来说时间复杂制度可以衡量一个"算法的量级"
  • Q3: 数据结构的分类?
    • 线性结构
      特点:每个节点都只能有1个前驱1个后继节点
      例如:栈, 队列
    • 非线性结构
      特点:每个节点都可以有多个前驱,多个后继节点
      例如:树, 图
  • Q3:线性结构存储数据的方式
    • 顺序表:
      • 将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示.
      • 解释: 顺序表有 数据区信息区 两部分组成.
    • 链表:
      • 将元素存放在通过链接构造起来的一系列存储块中,存储区是非连续的

http://www.kler.cn/a/612761.html

相关文章:

  • 如何使用RK平台的spi驱动 spidev
  • 自动化发布工具CI/CD实践Jenkins各配置功能介绍和管理!
  • 质检LIMS系统在化肥生产企业的应用 化肥质量管理的数字化中枢
  • Python学习第二十六天
  • Spring Data审计利器:@LastModifiedDate详解!!!
  • PDF处理控件Spire.PDF系列教程:Java 给现有的 PDF 文档添加页眉页脚
  • PyTorch 深度学习实战(27):扩散模型(Diffusion Models)与图像生成
  • java替换html中的标签
  • 《深度剖析SQL数据类型转换:隐式与显式的奥秘》
  • WPF 附加属性
  • 在海量数据中精准定位:BloomFilter的工作原理与实战指南
  • OmniGraffle Pro for Mac思维导图
  • 自行车模型与汽车模型的混合策略在自动驾驶中的多维度协同优化
  • 测试模版12
  • 从链上到现实:Python如何重塑区块链供应链管理
  • 【DeepSeek学C++】移动构造函数
  • 127. 单词接龙【 力扣(LeetCode) 】
  • T11 TensorFlow入门实战——优化器对比实验
  • 谈谈空间复杂度考量,特别是递归调用栈空间消耗?
  • HTTP 状态码与前端 try-catch 捕获关系