Java教程

基础篇—— 数据结构与算法

本文主要是介绍基础篇—— 数据结构与算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、数据结构

个人理解:数据结构的释义,我觉得重点是在结构上,单纯的数据当然也只是数据,但是,如果按照结构内的规则去构造这些数据,并且根据其结构所衍生的算法对数据进行操作,这些数据就会呈现更多形态。有时候我会考虑,数据结构是通过数据填充结构,还是使用数据构造结构,我想应该是后者,因为每一个结构都可能是根据某种规则无限延伸的,并不能事先建造好供数据填充。
时间复杂度递增:

复杂度 量级
常量阶 O(1)
对数阶 O(logn)
线性阶 O(n)
线性对数阶 O(nlogn)
平方阶 O(n的平方)
k次方阶 O(n的k次方)
指数阶 O(2的n次方)
阶乘阶 O(n!)

二、数据结构-- 算法

1、内容

基本的数据结构和算法有哪些?如下图:
image

10个基本的数据结构和算法包括:

  • 数据结构:数组,链表,栈,队列,散列表,二叉树,堆,跳表,图,Trie树;
  • 算法:递归,排序,二分查找,搜索,哈希算法,贪心算法,分治算法,回溯算法,动态规划,字符串匹配算法。

2、数据结构-- 数组

1、数组具有随机访问的特性,这种特性是由计算机为数组开辟的内存连续性决定的,也正是为了维持这种内存连续性,使得数组的添加删除操作的时间复杂度增加。这种通过内存地址+索引直接进行随机访问的模式,是CPU缓存机制的体现。
2、数组内存地址是一块连续的内存空间:数组内存 = 计算机分配的base_地址 + 索引i * 数据所占内存。
3、数组越界问题,在C语言中需要开发者维护,java中由JVM维护。

3、数据结构-- 链表

1、链表所申请的内存空间不一定是连续的,可以是分散的。
2、链表也可以是有序的,每个结点存储下个结点的指针来串联链表分散的结点。

4、数据结构-- 栈

1、栈结构的特性是先进后出,函数调用时创建的临时变量就是存储在栈中。
2、函数调用中,如果有子函数,出栈顺序先进后出,能够安全的先出栈子函数变量。
3、栈结构很容易出现在对称场景中。

5、数据结构-- 队列

1、队列的先进先出的特性,多用于资源受限的池化等场景。

6、算法-- 递归

1、当一个问题可以分解成相同思路的单个或多个子问题时,可以考虑使用递归算法;根据思路写出递推公式,然后确定递出去的终止结果,反推到当前问题。
2、递归代码要重点考虑堆栈内存溢出和重复计算问题。
3、通过栈内存结构实现递归,空间复杂度高。所以一般递归都可以使用非递归实现。

7、算法-- 排序

1、常用排序算法:冒泡排序,插入排序,选择排序,归并排序,快速排序,计数排序,基数排序,桶排序。
2、核心思想:

  • 冒泡排序:比较交换,稳定排序,时间复杂度O(n^2)
  • 插入排序:比较插入,稳定排序,时间复杂度O(n^2)
  • 选择排序:比较交换,不稳定排序,时间复杂度O(n^2)
  • 归并排序:递归分治,稳定排序,时间复杂度O(nlogn)
  • 快速排序:递归分治,不稳定排序,时间复杂度O(nlogn)
数据结构 衍生算法 结构特性
数组 1、二分查找法 1、具有随机访问的特点
这篇关于基础篇—— 数据结构与算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!