![](https://img-blog.csdnimg.cn/20190708203044243.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
数据结构与算法详解
皓晨的架构笔记
生命不息,奋斗不止!
展开
-
数据结构与算法之空间复杂度
算法的空间复杂度类似于时间复杂度的讨论,一个算法的空间复杂度(Space Complexity)定义为该算法所耗费的存储空间,它也是问题规模n的函数。空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。有的算法需要占用的临时工作单元数与解决问题的规模n有关,它随着n的增大而增大,当n较大时,将占用较多的存储单元,例如快速排序和归并排序算法就...原创 2019-08-31 21:43:52 · 295 阅读 · 0 评论 -
数据结构与算法之时间复杂度
算法的时间复杂度一般情况下,算法中的基本操作语句的重复执行次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n) / f(n) 的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作 T(n)=O( f(n) ),称O( f(n) ) 为算法的渐进时间复杂度,简称时间复杂度。T(n) 不同,但时间复杂度可能相同。 如:T(n)=...原创 2019-08-31 21:41:22 · 242 阅读 · 0 评论 -
数据结构与算法之八皇后问题
八皇后问题八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。八皇后问题算法思路分析第一个皇后先放第一行第一列;第二个皇后放在第二行第一列、然后判断是否OK, 如果不OK,继续放在第二列、第三列、依次把所...原创 2019-08-31 21:32:54 · 583 阅读 · 0 评论 -
数据结构与算法之迷宫回溯
什么是回溯?回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法...原创 2019-08-31 20:54:40 · 163 阅读 · 0 评论 -
数据结构与算法之递归
简介递归就是方法自己调用自己,每次调用时传入不同的参数,递归有助于解决复杂的问题,同时也能使代码变得简洁。递归调用机制有编程的基础的同学,应该知道递归的写法,下面我将使用两个小案例来分析递归的调用机制。案例一 递归打印数字:public static void main(String[] args) { testRecursion(5);}public static voi...原创 2019-08-25 17:20:50 · 129 阅读 · 0 评论 -
数据结构与算法之逆波兰计算器
前言在上篇文章,我们介绍了什么是前缀(波兰表达式)、中缀、后缀表达式(逆波兰表达式)。本编文章我们将使用逆波兰表达式来实现一个计算器。逆波兰计算器下面我将利用栈来实现简单的逆波兰表达式的运算具体计算步骤,见上篇文章逆波兰表达式的介绍代码示例:public class PolandNotaion { public static void main(String[] args) ...原创 2019-07-16 22:21:42 · 182 阅读 · 0 评论 -
数据结构与算法之前缀-中缀-后缀表达式
前言在上篇文章我们介绍了栈的基本概念,演示了如何来实现了一个简单的栈。并基于栈实现了一个综合计算器,这个计算器只支持简单的+、-、*、/,无法支持加小括号来控制运算的优先级,要控制运算优先级,首先要了解本文标题所说的几个表达式,下面我将一一介绍。前缀表达式(波兰表达式)前缀表达式是一种没有括号的算术表达式,前缀表达式也称波兰表达式,前缀表达式的运算符位于操作数之前。例如:(3+4)×5-6...原创 2019-07-15 21:38:05 · 424 阅读 · 0 评论 -
数据结构与算法之栈
前言在前面几篇我们有讲到数组,链表等数据结构,这些都是存储数据的最基本的结构。而本篇文章讲解的则是利用算法和数据结构来实现一些小工具,来解决现实中某种需求。它就是栈。什么是栈?栈(stack) 是一种数据结构,是一个先入后出(Filo-First In Last Out) 的有序列表,只能在一端进行插入和删除操作的特殊线性表。允许插入的一端和删除的一端,为变化的一端,称为 栈顶(top),另...原创 2019-07-14 22:41:00 · 160 阅读 · 0 评论 -
数据结构与算法之双向链表
前言在上篇文章中,我们有介绍单向链表及如何实现,本次我们将来介绍如何实现双向链表。双向链表介绍双向链表是链表中的一种。和单链表一样,双链表也是由节点组成,但与单向链表不同的是,单向链表中的节点只有一个指针指向下一个节点,而双向链表的节点有两个指针,分别指向前一个节点和后一个节点。所以,从双向链表中的任意一个结点开始,都可以很方便地获取到前一个节点和后一个节点双向链表结构图双向链表实...原创 2019-07-08 21:36:53 · 203 阅读 · 0 评论 -
数据结构与算法之单向链表
前言链表是一中有序的线性列表,链表与数组不同的是,数组是一种连续存储的线性结构,而链表是以节点的形式来存储的。链表有分为好几类,分别是:单向链表:一个节点指向下一个节点双向链表:一个节点有两个指针域,分别指向前一个节点和后一个节点循环链表:能通过任何一个节点找到其他所有的节点,将两种(双向/单向)链表的最后一个结点指向第一个结点从而实现循环此处先讲解单向链表,单向链表每个节点都包含...原创 2019-06-23 19:56:40 · 378 阅读 · 0 评论 -
数据结构与算法之队列
前言队列是一个有序的线性列表,可以用数组或链表来实现,遵循先进先出、后进后出的原则。队列只能从列表的一端进行入队另一端进行出队操作。队列有两种存储数据的形式:顺序存储:顺序存储的队列也称为顺序队列,内部使用数组来实现的,顺序队列又分为非循环顺序队列和循环顺序队列。顺序队列是采用两个指针,头指针(front)和尾指针(rear)来分别指向队列的头部和尾部。当使用非循环顺序队列时,会出现假...原创 2019-06-22 22:36:43 · 139 阅读 · 0 评论 -
数据结构与算法之稀疏数组
前言讲稀疏数组前,我先假设一个场景。比如说,我们要编写一个五子棋程序,下面这个10*10的数组就代表这我们这个游戏的棋盘。数组中,1代表白棋,2代表黑棋。0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...原创 2019-06-18 22:46:54 · 223 阅读 · 0 评论 -
数据结构之线性结构和非线性结构
线性结构线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息常见的线性结构有:数组、队列、链表和栈非线性结构所谓非线性结构,就是非一对一的线性关系,可...原创 2019-06-17 21:25:29 · 2738 阅读 · 0 评论