Java 数据结构与算法
目录
Java 数据结构与算法
数据结构
数据结构的定义
数据的逻辑结构
数据的物理结构
数据存储结构
数据结构的分类
线性结构
非线性结构
常用的数据结构
数组(Array)
栈( Stack)
队列(Queue)
链表( Linked List)
树( Tree)
图(Graph)
堆(Heap)
散列表(Hash)
常用算法
算法
特征
要素
一、数据对象的运算和操作:
二、算法的控制结构:
算法评定
时间复杂度
空间复杂度
正确性
可读性
鲁棒性
常用方法简介
递推法
递归法
穷举法
贪心算法
分治法
动态规划法
迭代法
分支界限法
回溯法
Java 数据结构与算法
数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
数据结构的定义
数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构。同一逻辑结构可以对应不同的存储结构。算法的设计取决于数据的逻辑结构,而算法的实现依赖于指定的存储结构。
数据的逻辑结构
指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后间关系,而与他们在计算机中的存储位置无关。逻辑结构包括:
1.集合:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;
数据的物理结构
数据的物理结构是数据结构在计算机中的表示(又称映像),由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。
数据存储结构
数据的逻辑结构在计算机存储空间中的存放形式称为数据的物理结构(也称为存储结构)。一般来说,一种数据结构的逻辑结构根据需要可以表示成多种存储结构,
数据的顺序存储结构的特点是:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系;非顺序存储的特点是:借助指示元素存储地址的指针表示数据元素之间的逻辑关系。
数据结构的分类
线性结构
简单地说,线性结构就是表中各个结点具有线性关系。如果从数据结构的语言来描述,线性结构应该包括如下几点:
3、线性结构所有结点都最多只有一个直接前趋结点和一个直接后继结点。
线性表就是典型的线性结构,数组、还有栈、队列和串等都属于线性结构。
非线性结构
简单地说,非线性结构就是表中各个结点之间具有多个对应关系。如果从数据结构的语言来描述,非线性结构应该包括如下几点:
2、非线性结构的一个结点可能有多个直接前趋结点和多个直接后继结点。
在实际应用中,二位数组、多维数组、广义表、树结构和图结构等数据结构都属于非线性结构。
常用的数据结构
数组(Array)
栈( Stack)
栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。栈按照后进先出的原则来存储数据,也就是说,先插入的数据将被压入栈底,最后插入的数据在栈顶,读出数据时,从栈顶开始逐个读出。栈在汇编语言程序中,经常用于重要数据的现场保护。栈中没有数据时,称为空栈。
队列(Queue)
链表( Linked List)
链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。链表由一系列数据结点构成,每个数据结点包括数据域和指针域两部分。其中,指针域保存了数据结构中下一个元素存放的地址。链表结构中数据元素的逻辑顺序是通过链表中的指针链接次序来实现的。 [
树( Tree)
树是典型的非线性结构,它是包括,2个结点的有穷集合K。在树结构中,有且仅有一个根结点,该结点没有前驱结点。在树结构中的其他结点都有且仅有一个前驱结点,而且可以有两个后继结点,m≥0。
图(Graph)
图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。如果两个顶点之间存在一条边,那么就表示这两个顶点具有相邻关系。
堆(Heap)
堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆。堆的特点是根结点的值是所有结点中最小的或者最大的,并且根结点的两个子树也是一个堆结构。
散列表(Hash)
散列表源自于散列函数(Hash function),其思想是如果在结构中存在关键字和T相等的记录,那么必定在F(T)的存储位置可以找到该记录,这样就可以不用进行比较操作而直接取得所查记录。
常用算法
(1)检索。检索就是在数据结构里查找满足一定条件的节点。一般是给定一个某字段的值,找具有该字段值的节点。
(5)排序。把节点按某种指定的顺序重新排列。例如递增或递减。
算法
特征
有穷性 :算法的有穷性是指算法必须能在执行有限个步骤之后终止;
输入项 :一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
输出项 :一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
可行性 :算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。
要素
一、数据对象的运算和操作:
计算机可以执行的基本操作是以指令的形式描述的。一个计算机系统能执行的所有指令的集合,成为该计算机系统的指令系统。一个计算机的基本运算和操作有如下四类:
1.算术运算:加减乘除等运算
2.逻辑运算:或、且、非等运算
3.关系运算:大于、小于、等于、不等于等运算
4.数据传输:输入、输出、赋值等运算
二、算法的控制结构:
一个算法的功能结构不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。
算法评定
同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。
时间复杂度
算法的时间复杂度是指执行算法所需要的计算工作量。
空间复杂度
算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。
正确性
可读性
鲁棒性
鲁棒性是指一个算法对不合理数据输入的反应能力和处理能力,也称为容错性。
常用方法简介
递推法
递归法
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
穷举法
贪心算法
贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。
一般情况下,要选出最优量度标准并不是一件容易的事,但对某问题能选择出最优量度标准后,用贪婪算法求解则特别有效。
分治法
分治法是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
(2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;
(4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
动态规划法
迭代法
分支界限法
分枝界限法是一个用途十分广泛的算法,运用这种算法的技巧性很强,不同类型的问题解法也各不相同。
回溯法
算法是程序的灵魂,优秀的程序可以在海量的计算时仍保持高速计算
如果不想永远当代码工人 写出简洁 优雅 高效的代码必须对算法和数据结构有所研究。
数据结构是一门研究组织数据的方式的学科,有了编程语言也就有了数据结构
Java 数据结构与算法相关推荐
- Java 数据结构与算法系列之冒泡排序
一.前言 相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 Java 写的数据结构与算法. ...
- Java数据结构与算法——树(基本概念,很重要)
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 有网友私信我,期待我的下一篇数据结构.非常荣幸文章被认可,也非常感谢你们的监督. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督 ...
- Java数据结构与算法——插入排序
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,ja ...
- Java数据结构和算法(六)——前缀、中缀、后缀表达式
前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...
- Java数据结构和算法(一)——简介
本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...
- JAVA数据结构与算法【简单介绍】
前几天去面一个大厂,面试官特别好,面试官说到,我们的学习不能本末倒置,数据结构和算法是程序的基础,如果数据结构你没有学好,你真正意义上不算会写代码.你的代码是各处粘贴,杂乱无章的. 由于现在大多用JA ...
- java算法概述,Java数据结构与算法基础(一)概述与线性结构
Java数据结构与算法基础(二)递归算法 Java数据结构与算法基础(一)概述与线性结构 学习目的:为了能更顺畅的读很多底层API代码和拓宽解决问题的思路 一.数据结构概述 1.数据结构是什么?数据与 ...
- 【笔记】Java数据结构与算法
[笔记]Java数据结构与算法 文章目录 [笔记]Java数据结构与算法 1.八大排序应用场景 2.未完待续-- 1.八大排序应用场景 冒泡排序:优化后的冒泡排序可用于当数据已经基本有序,且数据量较小 ...
- 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法
二叉树 BinaryTree (先序.中序.后序遍历 节点查找.插入.删除 完整类) Java数据结构与算法 源代码: view plain /** * * @author sunnyykn */ i ...
- Java数据结构和算法(四)--链表
日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...
最新文章
- sql exists用法_新同事不讲武德,这SQL语句写得忒野了
- urlrewrite实现之HTTP 运行库支持
- BAPI:KBPP_EXTERN_UPDATE_CO, TCODE:CJ30/CJ40
- springMVC源码分析
- g++ linux 编译开栈_linux gcc和g++版本的修改
- docker仓库搭建、加密、用户认证
- Kubernetes—StatefulSet部署有状态应用详解(二十四)
- 每日整理Python基础——python教程入门学习
- 《RabbitMQ 实战指南》第五章 RabbitMQ 进阶(下)
- 【报告分享】2021日化行业社媒营销报告.pdf(附下载链接)
- jetbrain rider 逐渐完美了,微软要哭了么?
- SpringBoot+Vue项目个性化音乐推荐系统
- 软件工程导论习题集 | 170道选择 | 50道填空 | 40道简答 | 其他试卷资源
- 对物联网的感悟_物联网学习心得
- 深度可分离卷积vs标准卷积
- Jsp jsp实现原理
- 硬盘三大种类( SSD ; HHD ; HDD )
- 《微SaaS创富周刊》第4期:2023年50+个微SaaS创业思路、时间管理APP 为我创收60万美元
- 学习笔记之——路径规划
- 2013NET笔试题及答案
热门文章
- VICKERS比例阀的组成及其工作原理
- 复旦微FM25W128-SOB-T-G-Q1替代SPI FLASH
- C/C++: “error: stray ‘\357’ in program“问题及其解决方法
- html如何换成word,html怎么换成Word文档
- 流程中某个环节落地不好怎么办?
- 乐2Pro_乐视X625_官方线刷包_救砖包_解账户锁
- OpenWrt入坑之路
- Java培训包就业的机构
- 1分钟了解流程图、顺序图、状态图
- Android锁屏(四)