最新重学数据结构(序:概览)(2),Java开发实战讲解

总结

我个人认为,如果你想靠着背面试题来获得心仪的offer,用癞蛤蟆想吃天鹅肉形容完全不过分。想必大家能感受到面试越来越难,想找到心仪的工作也是越来越难,高薪工作羡慕不来,却又对自己目前的薪资不太满意,工作几年甚至连一个应届生的薪资都比不上,终究是错付了,错付了自己没有去提升技术。

这些面试题分享给大家的目的,其实是希望大家通过大厂面试题分析自己的技术栈,给自己梳理一个更加明确的学习方向,当你准备好去面试大厂,你心里有底,大概知道面试官会问多广,多深,避免面试的时候一问三不知。

大家可以把Java基础,JVM,并发编程,MySQL,Redis,Spring,Spring cloud等等做一个知识总结以及延伸,再去进行操作,不然光记是学不会的,这里我也提供一些脑图分享给大家:

希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 2.2、算法设计要求

  • 2.3、算法分析

    • 2.3.1、时间复杂度
    • 2.3.1.1、常数阶
  • 2.3.1.2、线性阶

  • 2.3.1.3、对数阶

  • 2.3.1.4、平方阶

  • 2.3.2、空间复杂度

转眼大学毕业已经一年多,计算机专业四大基础课——《数据结构》、《计算机网络》、《计算机组成原理》、《操作系统》,当时学的实在马虎,到现在已经快要还完了。“基础不牢,地动山摇”,曾经偷过的懒,现在都得给它补回去。

图一:数据结构概览

在这里插入图片描述

1、数据结构

========================================================================

1.1、数据结构的起源


1968 年, 美国的高德纳( Donald E.Knuth) 教授在其所写的《计算机程序设计艺术》 第一卷《 基本算法》 中, 较系统地阐述了数据的逻辑结构和存储结构及其操作,开创了数据结构的课程体系。

70 年代初, 出现了大型程序, 软件也开始相对独立, 结构程序设计成为程序设计方法学的主要内容, 人们越来越重视 “数据结构” , 认为程序设计的实质是对确定的问题选择一种好的结构, 加上设计一种好的算法。

程序设计 = 数据结构 + 算 法

1.2、基本概念和术语


  • 数据:是描述客观事物的符号, 是计算机中可以操作的对象, 是能被计算机识别, 并输入给计算机处理的符号集合。

  • 数据元素: 是组成数据的、 有一定意义的基本单位, 在计算机中通常作为整体处理。 也被称为记录。

  • 数据项: 一个数据元素可以由若干个数据项组成。

  • 数据对象: 是性质相同的数据元素的集合, 是数据的子集

来重点看看什么是数据结构:

结构, 简单的理解就是关系, 比如分子结构, 就是说组成分子的原子之间的排列方式。 严格点说, 结构是指各个组成部分相互搭配和排列的方式。 在现实世界中, 不同数据元素之间不是独立的, 而是存在特定的关系, 我们将这些关系称为结构。

那数据结构是什么?

数据结构: 是相互之间存在一种或多种特定关系的数据元素的集合。

在计算机中, 数据元素并不是孤立、 杂乱无序的, 而是具有内在联系的数据集合。 数据元素之间存在的一种或多种特定关系, 也就是数据的组织形式。

1.3、逻辑结构和物理结构


数据元素之间存在一种或多种特定关系,接下来就看看这个关系指的是什么关系。

按照视点的不同, 我们把数据结构分为逻辑结构和物理结构。

1.3.1、逻辑结构

逻辑结构体现的是数据元素之间的逻辑关系, 换句话说就是从操作对象中抽象出来的数学模型, 因此又称为抽象结构, 通常我们习惯说的数据结构一般就是指的逻辑结构。

下面是几种逻辑结构:

图二:集合结构

在这里插入图片描述

图三:线性结构

在这里插入图片描述

图四:树形结构

在这里插入图片描述

图五:图形结构

在这里插入图片描述

1.3.1、物理结构

物理结构结构是数据在计算机内的存储形式, 又称存储结构。 它包括数据元素的表示和关系的表示。

数据元素的存储结构形式有两种: 顺序存储和链式存储。

  • 顺序存储

顺序存储结构是把数据元素存放在地址连续的存储单元里, 其数据间的逻辑关

系和物理关系是一致的。

图六:顺序存储

在这里插入图片描述

  • 链式存储

链式存储结构是把数据元素存放在任意的存储单元里, 这组存储单元可以是连续的, 也可以是不连续的。 数据元素的存储关系并不能反映其逻辑关系。

图七:链式存储

在这里插入图片描述

2、算法

======================================================================

2.1、什么是算法?


先来看看算法的定义:

算法是解决特定问题求解步驟的描述, 在计算机中表现为指令的有限序列, 并且每条指令表示一个或多个操作。

通俗来说,算法是指解决问题的一种方法或者一个过程。 一个问题可以用多种算法来解决, 一个给定的算法解决一个特定的问题。

那么数据结构和算法有什么关系呢?算法和数据结构是焦不离孟的关系。

不了解施加于数据上的算法需求就无法决定数据结构; 反之算法的结构设计和选择又依赖于作为其基础的数据结构。

数据结构为算法提供了工具。 算法利用这些工具来实施解决问题的最优方案。

在计算机领域内, 一个算法实质上是根据处理问题的需要, 在数据的逻辑结构和存储结构的基础上施加的一种运算。

因为数据的逻辑结构和存储结构不是惟一的, 所以算法的描述可能不惟一。 即使逻辑结构和存储结构相同, 算法可能也不惟一。 通过学习数据结构,可以使得程序设计者选择一种比较好的算法。

2.1、算法的特性


算法具有五个基本特性: 输入、 输出、 有穷性、 确定性和可行性。

  • 输入/输出

输入和输出特性比较容易理解, 算法具有零个或多个输入。 尽管对于绝大多数算法来说, 输入参数都是必要的, 但对于个别情况, 如打印 “hello world!”这样的代码, 不需要任何输入参数, 因此算法的输入可以是零个。 算法至少有一个或多个输出, 算法是一定需要输出的, 不需要输出, 那这个算法就没有意义了。

  • 有穷性

算法在执行有限的步骤之后, 自动结束而不会出现无限循环, 并且每一个步骤在可接受的时间内完成。 现实中经常会写出死循环的代码, 这就是不满足有穷性。

  • 确定性

算法的每一步骤都具有确定的含义, 不会出现二义性。 算法在一定条件

下, 只有一条执行路径, 相同的输入只能有唯一的输出结果。 算法的每个步骤被精确

定义而无歧义。

  • 可行性

算法的每一步都必须是可行的, 也就是说, 每一步都能够通过执行有限次数完成。 可行性意味着算法可以转换为程序上机运行, 并得到正确的结果。

2.2、算法设计要求


设计一个好的算法通常应考虑达到以下目标:正确性、可读性、健壮性、效率与低存储量需求。

2.3、算法分析


算法是解决计算问题的工具。 算法的好与坏直接影响解决问题的效率, 为提高解决问题的效率, 针对一个具体问题的解决方法, 除了需要考虑对算法的具体描述外, 还应具有衡量该算法好坏的方法。

算法的分析主要是指判断算法的优劣, 判断一个算法的好坏一般从两个方面考虑, 即从时间角度和从空间角度上衡量算法。 一般算法分析从时间角度考虑的比较多。 当然判断一个算法的好与坏, 也不能只以时间或空间衡量简单化, 而应该根据实际情况综合考虑。

算法度量主要有这两个方法:

  • 事后统计方法

这种方法的缺点是, 必须先运行依据算法编制的程序; 所花时间的统计量依赖于计算机的软件、 硬件等环境因素, 容易掩盖算法本身的优劣。 因此人们常用第 2 种方法。

  • 事前分析估算方法

一个用高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:

• 算法选用何种策略

• 问题规模

• 书写程序的语言

• 编译产生的机器代码质量

• 机器执行指令的速度

当然,抛开硬件方向来讲,算法效率依赖于问题的规模, 或者说, 它是问题规模的函数。

但在实践中, 我们可以把两种方法结合起来使用。一般地, 我们将算法的求解问题的输入称为问题的规模, 并用一个整数 n 表示。 例如, 矩阵乘积问题的规模是矩阵的阶数, 而一个图论问题的规模则是图中的顶点个数或

边的条数。

在算法的每个步骤中, 可能有若干条语句, 而频度就是指每条语句的执行次数。 一个算法的时间复杂度是指算法的时间耗费。

笔者福利

以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是HR的问题都有针对性的回答。

有了这个,面试踩雷?不存在的!

回馈粉丝,诚意满满!!!




本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

有了这个,面试踩雷?不存在的!

回馈粉丝,诚意满满!!!

[外链图片转存中…(img-3HxjZcpe-1715683665963)]
[外链图片转存中…(img-uLSaULgD-1715683665963)]
[外链图片转存中…(img-H1FSzXiT-1715683665963)]
[外链图片转存中…(img-D1gZlUeN-1715683665964)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值