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