
算法数据结构
算法数据结构
风zi
这个作者很懒,什么都没留下…
展开
-
704、scala-处理字符串算式,使用栈来实现计算器-自定义优先级[priority]
需求:31+2*(4+15-45+4/2)-1 ,处理此字符串,完成使用栈实现计算功能思路: * 计算式:31+2*(4+1*5-4*5+4/2)-1 * * 处理难点: 1.数字多位 * 2.操作符优先级设置 * 3.括号操作符处理 * * 解决:使用两个栈来存放计算式的操作符与数字 * * 思路:1.因为数字可能是多位字符串,则需要一个变量记录每次数字截取开始坐标 * 2.处理如上计算式为一个字符串,从前到原创 2020-07-10 15:44:00 · 341 阅读 · 0 评论 -
703、scala单向循环列表解决-Josephu (雅瑟夫)问题
Josephu 问题为: 设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示: 用一个不带头结点的循环链表来处理 Josephu 问题:先构成一个有 n 个结点的单循环链表,然后由 k 结点起从 1 开始计数,计到 m 时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从 1 开始原创 2020-07-06 13:02:42 · 218 阅读 · 0 评论 -
702、scala-五子棋游戏,控制台输入棋子坐标
启动main函数控制台输入棋子坐标-----------------欢迎进入五子棋界面----------------- 1 双人对战 5 退 出请选择(1-5):1----------欢迎进入棋盘页面----------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 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原创 2020-07-01 20:12:29 · 521 阅读 · 0 评论 -
701、scala-五子棋算法简单实现
如上图是一个五子棋游戏图。输赢计算算法: 方式一:没落下一枚棋子从首行首列开始遍历每个棋子,如发现棋手赢棋则结束游戏。 方式二:每落下一枚棋子,从此棋子开始判断其,纵-横-左斜-右斜 四个大方向计算棋手输赢两种方式区别: 方式一:因为是遍历所有棋子.原创 2020-07-01 20:03:02 · 411 阅读 · 0 评论 -
601、思路-找两人之间共同好友分析
如下好友列表当事人 好友列表A B,C,D,F,E,OB A,C,E,KC F,A,D,ID A,E,F,LE B,C,D,M,LF A,B,C,D,E,O,MG A,C,D,E,FH A,C,D,E,OI A,OJ B,OK A,C,DL D,E,FM E,F,GO A,H,I,J分析:找共同好友的中心应该是在朋友身上;假设a有三原创 2020-05-14 20:54:45 · 445 阅读 · 0 评论 -
512、java-求最大子数组
求最大子数组方式一:穷举出所有子数组 public static void main(String[] args) { int[] arr = new int[]{1,2,-4,5,-3,5,3,-9,3}; querySubArr(arr); querySubArrExhaustively(arr); } /** * @description: 穷举的方式,罗列出所有子数组 * @param ${tags}原创 2022-03-22 16:38:02 · 1245 阅读 · 0 评论 -
511、java-简单的CAS算法实现
一、简单的CAS实现 CAS算法是根据当前值于最近获取值比较是否相等,相等则修改,不相等则放弃,由此得出最重要的三步 1.获取值;2.比较直;3.会否修改值package com.cjy;import java.util.HashMap;import java.util.Map;public class CompareAnSwap { public ...原创 2018-09-08 15:01:16 · 1289 阅读 · 1 评论 -
510、java-改变一个给定的二维数组(3x3)转置
改变一个给定的二维数组(3x3)转置,如下效果代码实现//java 实现public static void main(String[] args) { //初始化数据 int[][] ar = new int[3][3]; ar[0][0]=1; ar[0][1]=2; ar[0][2]=3; ar[1][0]=4; ar[1][1]=5; ar[1][2]=6; ar[2][0]=7; ar[2][1]=8;原创 2020-06-18 15:53:18 · 419 阅读 · 0 评论 -
509、java- 操作文件夹形成树形结构
获取指定文件夹下的所有文件夹于文件形成树结构存库,使用递归调用的方式来实现;一 大体思路 1.首先需要一个默认指定的文件夹地址 2.需要一个树形vo类用来存放每个文件或文件夹的结构数据 3.处理函数的参数设计,需要一个可操作路径,及一个父类id 4.处理函数的思路:首先需要对传入进来的路径参数做判断,此路径是否存在,不错在抛异常结束程...原创 2018-06-24 16:23:56 · 7037 阅读 · 0 评论 -
508、java-算法分析-百钱买百鸡
问题:百钱买百鸡公元5世纪末,我国古代数学家张丘建在他撰写的《算经》中提出了这样一个问题:“鸡翁一只五钱,鸡母一只三钱,鸡雏三只一钱。百钱买百鸡,问鸡翁/鸡母/鸡雏各几只?”算法:根据以上的出的数学模型,如果使用通常的解析法很难求解,但使用穷举法很容易实现。package com.cjy.sf.demo;import java.util.Date;/** * 百钱买百鸡 */...原创 2019-02-15 23:11:03 · 725 阅读 · 0 评论 -
507、java-快速排序
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个元素要O(nlogn)次比较。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlogn)算法更快,因为它的内部循环可以在大部分的架构上很有效率地被实现出来实现思路:快速排序使用分治策略(Divide and Conquer)来把一个序列分为两个子序列。步骤为:1.从序列中挑出一个元...原创 2018-11-24 23:15:13 · 208 阅读 · 0 评论 -
506、java-堆排序
堆排序是指利用堆这种数据结构所设计的一种选择排序算法。堆是一种近似完全二叉树的结构(通常堆是通过一维数组来实现的),并满足性质:以最大堆(也叫大根堆、大顶堆)为例,其中父结点的值总是大于它的孩子节点。package main.java.com.cjy.sj.order;public class HeapSort { /** * 当前节点的为根节点树下的最大节点 ...原创 2018-11-21 23:31:45 · 118 阅读 · 0 评论 -
505、java-归并排序
归并排序是创建在归并操作上的一种有效的排序算法,效率为O(nlogn),1945年由冯·诺伊曼首次提出。归并排序的实现分为递归实现与非递归(迭代)实现: 1.递归实现的归并排序是算法设计中分治策略的典型应用,我们将一个大问题分割成小问题分别解决,然后用所有小问题的答案来解决整个大问题。 2.非递归(迭代)实现的归并排序首先进行是两两归并,然后四四归并,然后是八八归并,一直下去直到归并了整...原创 2018-11-21 19:26:24 · 186 阅读 · 0 评论 -
504、java-希尔排序
希尔排序,也叫递减增量排序,是插入排序的一种更高效的改进版本。希尔排序是不稳定的排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率2.但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位思路:希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终...原创 2018-11-20 19:53:14 · 118 阅读 · 0 评论 -
503、java-插入排序
插入排序依然是在数组的基础上进行排序,插入排序是指把数组拆分为两部门:一部分是已经排好序的,一部分是没有排好序的,从未排序部的第一个元素与已排序比分元素进行比较找到比他小的元素 M,从这个比他小的元素M后面所有元素向后移动一位,此元素插入这个小的元素M后面初始时所有数据都是未排序状态1-(length-1)的范围,已排好序的数据是(0-0),因为此时只有一个元素。排序过程:【5,3,2】1...原创 2018-11-19 17:12:06 · 187 阅读 · 0 评论 -
502、java-选择排序
选择排序在数组的基础上实现:选择已排序元素的后一个坐标拟作未排序数据中的最小坐标,并向后需要是否有比起更小的元素有则记录这个新找到的最小坐标,比较至未排序数据的末尾,由此时的最小元素坐标与已排序数据的后一个坐标做交换1.初始由于所有数组中的所有元素都为进行排序则默认为0-1是已排好序的元素末尾,则未排序元素由0~length-1的位置。2.选择坐标0的元素为最小元素进行向后比较,当发现比0小...原创 2018-11-17 21:07:51 · 118 阅读 · 0 评论 -
501、java-冒泡排序
一、冒泡排序这里假设是排序后从小到大,选择数组中第一个元素,从前向后一依次与后一个元素进行比较大小,L(前一个元素)>R(后一个元素)则L与R进行位置交换,依次比较至最后一个元素选择数组中的最大元素放置在排好序的数据中的第一个。演示: 假设有数组:【4,5,2,6,1】 第一次选择:4<5,不变继续比较,5>2交换位置,此时数组:【4,2,5,6,1】,继续向后比较,...原创 2018-11-17 20:45:13 · 148 阅读 · 0 评论 -
103、scala-链表之单向双向
一、什么是链表链表是有序的列表,但是它在内存中是存储如下:总结:链表是一个有序列表链表的数据,在内存空间不一定是连续分布的链表又分单向、双向或者循环区别:1、单向链表2、双向链表3、循环链表(单向循环,双向循环)如下图使用场景及优缺点:单向链表:1、单向链表需要实现队列,建设头结点是尾部,入队速度快,但是每次出队需要遍历到最后一个节点2、实现栈则比较完美3、链表移除数据需要临时节点来记录待删除节点的前一个节点双向链表:1、头尾节点都有并且是双向,则实现队列不用遍原创 2020-07-06 12:52:25 · 305 阅读 · 0 评论 -
102、scala-数组实现队列
一、队列实现的方式数组存储队列方式:1、指定队列大小不重复使用,相当于一次性使用2、每次出队一个元素,数组整体向前移动一步;入队根据坐标,快,出队需要迁移,慢3、循环队列,空间多次复用,使用队列时不能将队列填满,需要空出一个位置(推荐)链表实现队列: 链表实现队列,出队快,入队慢1、单向队列:移除节点需要临时节点2、双向队列:移除节点不需要临时节点3、循环对了:特殊场景使用,如约瑟夫问题:数数退二、数组与链表实现区别数组优点:数组实现方式数据入队快,因为根据索引数组缺点:数据扩容时的数原创 2020-07-01 23:41:58 · 330 阅读 · 0 评论 -
101、scala-稀疏数组介绍
什么是稀疏数组当一个数组中的数据大部分都是默认数据,此时数组数据需要存盘的情况下,大量默认数据也会占用存储空间。稀疏数组正是用于解决此类问题,稀疏数组只存在数据在原始数组中的位置及值,在存盘时只报存稀疏数组中的数据即可;当读取文件时根据稀疏数组来还原 原始数组。作用:减少存储空间,起到类似数据压缩的作用。下面就来使用一个简单案例介绍一下稀疏数组的使用问题引出:下面介绍一个游戏-五子棋,大家都知道棋盘是一个纵横交错的线划分而成的,其实转变一下就变成了编程中的二维数组,每个点都是数组中的一个坐标,下就原创 2020-07-01 17:03:33 · 276 阅读 · 0 评论 -
001、数据结构概念
1.什么是数据?信息的载体,它能被计算机识别、存储和加工处理。它是计算机程序加工的 ’原料‘。2.数据元素?数据的基本单位,有些情况下数据元素也称为元素、节点、顶点、记录。3.数据类型?所谓数据类型是一个值的集合以及在这些值上定义的一组操作的总称。例如C语言的”整数类型“就定义了一个整数的可取值得范围(“其最大值int-max依赖于具体机器”)以及对整数可施加的加、减、乘、除和取模等操...原创 2018-11-26 19:28:32 · 1450 阅读 · 0 评论