数据结构和算法介绍

什么是数据结构和算法

  • 广义上,数据结构就是一组数据的存储结构,算法就是操作数据结构的一种方法。
  • 程序 = 数据结构 + 算法
  • 结构是数据元素之间不是独立的,存在特定的关系,数据结构指的是数据对象中数据元素之间的关系。

算法的概念

  • 算法是计算机处理信息的本质,用过算法来告诉计算机如何执行程序。
  • 算法是一种解决问题的方法和思想

算法的5大特性

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

算法的效率的衡量

  • 好的算法可以优化程序的执行时间

1.依赖测试的环境

测试环境中的硬件的不同会对测试的结果有不同的影响。如i9的处理器要比i3的处理器明显要块很多。

2.数据规模的影响

如果测试的数据规模太小,测试的结果可能无法准确的反映算法的性能

大O复杂度表示

T(n) = O(fn())

时间复杂度的分析

1.只关注循环执行次数最多的一段代码

2.加法法则:总复杂度等于量级最大的那段代码的复杂度

时间复杂度

在分析执行的算法中,算法完成工作需要多少基本的操作。完成最少的操作,是最优时间复杂度;完成最多的操作,是最坏时间复杂度;平均的操作,是平均时间复杂度。

我们只考虑最坏时间复杂度。最坏时间复杂度,提供了一种保证,表明算法在此程度的基本操作中一定能完成的工作。

常见的时间复杂度

从低阶到高阶:常数阶O(1)、对数阶O(logn)、线性阶O(n)、nlogn阶O(nlogn)、指数阶O(n**2)

顺序表

顺序表
将元素顺序地存放在一块连续地存储区里,元素之间地顺序关系由他们地存储顺序自然连接。
链表
将元素存放在通过链接构造起来地一系列存储块汇中。

单向链表:它的每个结点包含两个域,一个信息域和一个链接域,这个链接指向链表的下一个结点,最后一个结点的链接域则指向一个空值。
循环链表:循环链表的尾节点指针是指向链表的头结点。
双向链表:支持两个方向,每个结点不止有一个后继指针next指向后面的结点,还有一个前驱prev指向前面的结点。


1.常见的数据结构

栈是一种特殊的线性表,它只能在表的固定一段进行数据节点的插入和删除。后进者先出,先进者后出。

队列

队列也是一种线性表,允许在表的一段进行插入数据,在另一端进行删除数据。先进先出。

用来模拟具有树状结构性质的数据集合,它是由n和有限结点组成一个具有层次关系的集合,它像一个倒挂的树,根朝上,而叶朝下。

树的高度、深度、层

树的种类
无序树:树中任意节点之间没有顺序关系,也是自由树。
有序树:二叉树、霍夫曼树、B树

是一种更复杂的非线性表,图中的顶点可以与任意顶点建立连接关系,把这种建立的关系叫做边。

散列表

散列表用的是数组支持按照下标随机访问数据的特性,散列表是一种数组的扩展。如果在结构的存在关键字和有相等的记录,那么可以在存储的位置可以找到该记录,就可以不用进行比较操作而直接取得所查的记录。

2.常用算法

数据结构研究的内容:就是如何按一定的逻辑结构,把数据组织起来,并选择适当的存储表示方法把逻辑结构组织好的数据存储到计算机的存储器里。算法研究的目的是为了更有效的处理数据,提高数据运算效率。数据的运算是定义在数据的逻辑结构上,但运算的具体实现要在存储结构上进行

检索

就是在数据结构里查找满足一定条件的节点。一般是通过给定某字段的值,找有该字段值的节点。

插入

在相应的位置向数据结构中增加新的节点

删除

把指定的节点从数据结构中删除

更新

改变指定节点的一个或多个字段的值

排序

把节点按照某种指定的顺序重新排列,如递增递减。

数据结构和算法基本介绍和概念相关推荐

  1. Java数据结构与算法——树(基本概念,很重要)

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 有网友私信我,期待我的下一篇数据结构.非常荣幸文章被认可,也非常感谢你们的监督. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督 ...

  2. 30 个重要数据结构和算法完整介绍(建义收藏保存)

    一.数据结构 1. 数组(Arrays) 数组是最简单也是最常见的数据结构.它们的特点是可以通过索引(位置)轻松访问元素. 它们是做什么用的? 想象一下有一排剧院椅.每把椅子都分配了一个位置(从左到右 ...

  3. 数据结构与算法 各类数图概念集合

    拓扑排序: 有向无环图才能进行拓扑排序: 理解:就是在大学期间所有的课程,你只有先学完计算机基础,才能学更加高深的课程,从一个入度为0的点出发,找下一个一直到最后就是拓扑排序: 前.中.后序排序: 前 ...

  4. 数据结构与算法--基本介绍

    我想计算机或相关专业都学过数据结构的课程吧,反正当时我是听的懵懵懂懂,而且压根不知道是干嘛用的,为什么要有这个东西,你们呢?欢迎评论区交流! 什么是数据结构 数据结构是计算机存储.组织数据的方式.数据 ...

  5. python【数据结构与算法】B树概念解析和实现

    下面来具体介绍一下B-树(Balance Tree),一个m阶的B树具有如下几个特征: 1.根结点至少有两个子女. 2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k < ...

  6. python【数据结构与算法】红黑树概念辨析

    文章目录 1 二叉查找树 2 AVL 3 红黑树 1 二叉查找树 二叉查找树,Binary Search Tree 「BST」,要想了解二叉查找树,我们首先看下二叉查找树有哪些特性呢? 某节点的左子树 ...

  7. 数据结构与算法-二叉树的名词概念与相关数据的计算

    示例图 名词解释 父节点 一个结点的前面的节点,前面的节点是父节点 子节点 一个节点的后面的节点,是子节点 叶子节点 如果一个节点,没有子节点,它就是叶子节点 根节点 没有父节点的节点,是根节点,也就 ...

  8. 数据结构与算法(Java版) | 本套系列教程的内容介绍

    文章目录 本套系列教程的内容介绍 第一章节:内容介绍和授课方式 第二章节:数据结构与算法的介绍 第三章节:稀疏数组和队列 第四章节:链表 第五章节:栈 第六章节:递归 第七章节:排序算法 第八章节:查 ...

  9. 一文带你认识30个重要的数据结构和算法

    摘要:掌握DSA意味着你能够使用你的计算和算法思维来解决前所未见的问题.通过了解它们,您可以提高代码的可维护性.可扩展性和效率. 本文分享自华为云社区<30 个重要数据结构和算法完整介绍> ...

最新文章

  1. 赤兔四足机器人的作用_跑得快,打不死!清华大学开发“小强”机器人,壮汉狂踩也挡不住前进步伐...
  2. vim java 注释_centOS7 下的vim java补全
  3. 凯立德手机导航APP全新升级 小长假结伴出行说走就走
  4. PHPStorm的命令行配置成为Git bash的
  5. 茅台防伪溯源服务器临时维护,如何使用茅台防伪溯源系统?能辨别茅台酒真假?...
  6. Andropid自己定义组件-坐标具体解释
  7. vb红绿灯自动切换_VB红绿灯程序
  8. d0...while循环结构讲解
  9. MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误解决办法...
  10. 计算机专业技能水平如何提升,市计算机:提升技能水平
  11. Django2 SQLite3迁移到MySQL数据库
  12. php函数默认参数放在哪测,php函数默认参数的实例代码
  13. Mybatis-学习笔记(7)缓存机制
  14. cordova 美洽_phonegap-cordova-美洽客服插件-ios
  15. 全国火车高铁站及车次数据爬虫(内含100W+数据)
  16. 数据库实验——T-SQL编程
  17. 下属执行不给力?真相是90%的领导不会布置任务!
  18. Android游戏开发学习笔记(三):视频的播放
  19. uni-app图片上传(位置固定)
  20. python画一个爱心

热门文章

  1. 线性代数与解析几何——Part1 解析几何
  2. Elasticsearch 的全量同步和增量同步
  3. string的常用方法(详细)
  4. Linux 内核编译
  5. 食饵-捕食者模型matlab,食饵-捕食者模型解读.ppt
  6. JAVA的对象list参数的校验
  7. java用数组存放账号密码_从零自学Java-7.使用数组存储信息
  8. js 模拟浏览器的并行请求限制
  9. 通过python调用OpenAI的API
  10. 8B/10B编码原理详解、Verilog实现及在JESD204B中的应用