数据结构理论知识

这篇具有很好参考价值的文章主要介绍了数据结构理论知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

稀疏数组

二维数组转稀疏数组的思路

  1. 遍历原始二维数组,得到有效数据的个数sum

  2. 根据sum可以创建稀疏数组

sparseArr[sum+1][3] 稀疏数组行不定 列固定3列
    
row col val
  1. 将二维数组有效数据存储到稀疏数组

稀疏数组转原始的二维数组的思路

  1. 先读取稀疏数组第一行,根据第一行的数据,创建原始的二维数组

  2. 接着再读取稀疏数组后面几行的数据,并赋给原始的二维数组即可

牢记int用throw new RuntimeException, void 用打印异常信息

类型为void时,使用return退出程序

链表

单链表

  1. 先创建一个头结点,作用是表示单链表的头

  2. 后面我们每添加一个结点,就直接加入到链表的后面

需要按照编号的顺序添加

  1. 首先找到新添加的节点的位置,是通过辅助变量,通过遍历来搞定

  2. 新的节点.next=temp.next

  3. 将temp.next=新的节点

链表是以节点的方式来存储,是链式存储

每个节点包含data域,next域:指向下一个节点

链表的各个节点不一定是连续存储

对于单向链表增加删除通常设置临时变量temp=head

对于双向链表删除设置临时变量temp=head.next

单向环形链表

  1. 先创建第一个节点,让first指向该节点,并形成环形

  2. 后面当我们每创建一个新的节点,就把该节点,加入到已有的环形链表中即可

遍历环形链表

  1. 先让一个辅助指针(变量)curBoy,指向first节点

  2. 然后通过一个while循环遍历该环形链表即可 curBoy.next==first结束

栈 

使用栈完成表达式的计算思路

  1. 通过一个index值(索引),来遍历我们的表达式

  2. 如果我们发现是一个数字,就直接入数栈

  3. 如果发现扫描到是一个符号,分情况如下:

    • 如果发现当前的符号栈为空,就直接入栈

    • 如果符号栈中有符号,就进行比较;如果当前的符号优先级小于或等于栈中符号,就需要从数栈中pop出两个数,从符号栈中pop出一个符号,进行运算,将得到结果,入数栈,然后将当前的符号入符号栈;如果当前符号的优先级大于栈中符号,则直接入栈

  4. 当表达式扫描完毕,就顺序的从数栈和符号栈中pop出相应的数和符号,并运行

  5. 最后在数栈只有一个数字,就是表达式的结果

验证3+2*6-2

后缀表达式

从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的运算,并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果

正则表达式:"\\d+"代表多位数

中缀表达式转换为后缀表达式

  1. 初始化两个栈:运算符栈s1和储存中间结果的栈s2

  2. 从左到右扫描中缀表达式

  3. 遇到操作数时,压入s2

  4. 遇到运算符时,比较s1栈顶运算符的优先级

    • 如果s1为空,或者s1栈顶为左括号,则直接将该运算符入栈

    • 如果该运算符优先级大于s1栈顶运算符优先级,则直接将该运算符入栈

    • 否则,将s1栈顶运算符弹出并压入s2栈中,再次回到步骤4起点判断

  5. 遇到括号时,

    • 如果是左括号,则直接压入s1栈

    • 如果是右括号,则依次弹出s1栈顶的运算符,并压入到s2栈中,直到遇到左括号为止,这对括号便不存在了

  6. 一直重复步骤2到5直到表达式结束

  7. 将s1中剩余的运算符依次弹出并压入s2

  8. 依次弹出s2中的元素并输出,结果的逆序即为后缀表达式

递归调用规则

  1. 当程序执行到一个方法时,就会开辟一个独立的空间(栈)

  2. 每个空间的数据(局部变量),是独立的

八皇后问题(7k7k小游戏)

一维数组解决问题:arr[8]={0,4,7,5,2,6,1,3}//对应arr下标 表示第几行,即第几个皇后,arr[i]=val,表示第i+1个皇后,放在第i+1行的第val+1列

内部排序

内部排序

  1. 冒泡排序(比较相邻位置)稳定

  2. 选择排序(比较所有数)最小值 最小值索引 不稳定

  3. 直接插入排序 插入值 插入索引 稳定

  4. 希尔排序 数组长度/2=步长 比较步长之间的数 不稳定

  5. 快速排序 找到一个基准arr【(0+arr.length-1)/2】小于等于放在基准左边,大于等于放在基准右边 不稳定

  6. 归并排序 找到mid=(0+arr.length-1)/2 分解递归后接着合并 稳定

  7. 基数排序 稳定

    • 第一轮排序

    • 将每个元素的个位数取出来,然后看这个数应该放在哪个一维数组

    • 按照一维数组的下标依次取出数据,放入原来数组

    • 第二轮排序

    • 将每个元素的十位数取出来,然后看这个数应该放在哪个一维数组

    • 按照一维数组的下标依次取出数据,放入原来数组

    • 第三轮排序

    • 将每个元素的百位数取出来,然后看这个数应该放在哪个一维数组

    • 按照一维数组的下标依次取出数据,放入原来数组

    • 直到每个元素的n位数取出来都是0时即为排序后的数组

查找

  1. 顺序查找(线性查找)

  2. 二分查找/折半查找

  3. 插值查找

    int mid=left+(right-left)*(findVal-arr[left])/(arr[right]-arr[left]);
    注意事项,
    1.对于数据量较大,关键字分布比较均匀的查找表来说,采用插值查找,速度较快
    2.关键字分布不均匀的话,不一定比二分查找好
  4. 斐波那契查找

 文章来源地址https://www.toymoban.com/news/detail-699888.html

到了这里,关于数据结构理论知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【python与数据结构】(leetcode算法预备知识)

    笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 1.数字类型: 整数(int):表示整数值,例如 1、-5、100。 浮点数(float):表示带有小数部分的数字,例如 3.14、-0.5、2.0。 复数(complex):表示实部和虚部的复数,例如 2+3j。 2.布尔类型(bool): 表示真(True)或假(

    2024年02月08日
    浏览(39)
  • 【数据结构与算法】图遍历算法 ( 深度优先搜索 DFS | 深度优先搜索和广度优先搜索 | 深度优先搜索基本思想 | 深度优先搜索算法步骤 | 深度优先搜索理论示例 )

    图 的 遍历 就是 对 图 中的 结点 进行遍历 , 遍历 结点 有如下两种策略 : 深度优先搜索 DFS 广度优先搜索 BFS \\\" 深度优先搜索 \\\" 英文名称是 Depth First Search , 简称 DFS ; DFS 基本思想 : 访问第一个邻接结点 : 从 起始点 出发 , 该 起始点 可能有 若干 邻接结点 , 访问 第一个 邻接结点

    2024年02月02日
    浏览(49)
  • 数据结构—基础知识(12):二叉树算法补充

    复制二叉树 【算法步骤】 如果是空树,递归结束,否则进行以下操作: 申请一个新结点空间,复制根结点; 递归复制左子树; 递归复制右子树。 计算二叉树的深度 【算法步骤】 如果是空树,递归结束,深度为0,否则进行以下操作: 递归计算左子树的深度记为m; 递归计

    2024年01月25日
    浏览(52)
  • Java面试知识点(全)-数据结构和算法

    Java面试知识点(全)https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 数组 数组的下标寻址十分迅速,但计算机的内存是有限的,故数组的长度也是有限的,实际应用当中的数据往往十分庞大;而且无序数组的查找最坏情况需要遍历整个数组;后来人们提出了二分查

    2024年02月05日
    浏览(62)
  • 【算法与数据结构】二叉树的三种遍历代码实现(上)—— 用递归序知识点讲解

      本篇博客 (上篇) 先带大家学习 递归方式 进行三种遍历, 而在后续的 (下篇) 中将为大家详细讲解非递归的三种遍历方式。 目录 1、二叉树 2、二叉树的递归遍历 2.1、先序遍历 2.2、中序遍历 2.3、后序遍历  二叉树(Binary tree)是树形结构的一个重要类型。许多实际问

    2024年02月08日
    浏览(44)
  • 数据结构——六度空间理论验证

    1.输入格式: 多组数据输入,每组数据m+1行,第一行有两个数字,n和m,代表着n个人和m组朋友的关系,n个人的编号为1到n,第二行到第m+1行每行包括两个数字a和b,代表着两个人互相认识。 输出格式: 对每个结点输出与该结点距离不超过6的结点数占结点总数的百分比,精确到

    2024年02月12日
    浏览(39)
  • 【数据结构】 二叉树理论概念!一文了解二叉树!

    🎥 屿小夏 : 个人主页 🔥个人专栏 : 数据结构解析 🌄 莫道桑榆晚,为霞尚满天! 什么是二叉树?二叉树的组成构造是什么样的?我们将由浅入深,循序渐进的方式把二叉树给搞明白,让你彻底了解二叉树! 树是一种非线性的数据结构,它是由n(n=0)个有限结点组成一

    2024年02月05日
    浏览(48)
  • 自然语言处理 Paddle NLP - 结构化数据问答-理论

    基础 自然语言处理(NLP) 自然语言处理PaddleNLP-词向量应用展示 自然语言处理(NLP)-前预训练时代的自监督学习 自然语言处理PaddleNLP-预训练语言模型及应用 自然语言处理PaddleNLP-文本语义相似度计算(ERNIE-Gram) 自然语言处理PaddleNLP-词法分析技术及其应用 自然语言处理Pa

    2024年02月11日
    浏览(62)
  • 三、计算机理论-关系数据库-结构化查询语言SQL

    SQL 概述 是一种介于关系代数与关系演算之间的语言,现成为关系数据库的标准语言 特点:综合统一、高度非过程化、面向集合的操作方式、以同一种语法结构提供两种使用方式(直接使用或者嵌入高级语言使用)、语言简洁,易学易用。 四大功能如下: SQL功能 动词 数据查

    2024年01月24日
    浏览(59)
  • Linux中的命令行学习数据结构就下面几个大全【理论篇】

    PhysicsRaycaster是Unity UGUI中的一个组件,用于在UI元素上进行物理射线检测。它可以检测鼠标或触摸事件是否发生在UI元素上,并将事件传递给相应的UI元素。 PhysicsRaycaster通过发射一条射线来检测UI元素。当射线与UI元素相交时,PhysicsRaycaster会将事件传递给相应的UI元素。 Event

    2024年02月22日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包