
算法与数据结构
'"<>{{7*7}}
这个作者很懒,什么都没留下…
展开
-
算法与数据结构(Go语言版本)学习笔记Day02: 数组栈、数组队列,链式栈,链式队列,用栈实现深度遍历,用队列实现广度遍历
0x00 递归实现文件夹的遍历思路:写一个读取文件夹的函数:用一个函数读取文件中的所有文件和文件夹,然后遍历所有文件和文件夹,如果是文件,就存起来,如果是文件夹,就再次调用该函数。func GetAll(path string, files []string) ([]string, error) { read, err := ioutil.ReadDir(path) //读取文件夹 if err != nil { return files, errors.New("文件夹不可读取")原创 2020-12-12 10:21:45 · 373 阅读 · 0 评论 -
算法与数据结构(Go语言版本)学习笔记Day01:数组、迭代器、栈、用栈+循环模拟递归
0x00 golang 实现数组结构/* * @Author: your name * @Date: 2020-12-05 18:14:16 * @LastEditTime: 2020-12-05 22:35:10 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: /learngo/数据结构/ArrayList/ArrayList.go */package原创 2020-12-07 15:54:06 · 377 阅读 · 0 评论 -
codeup 1918 简单计算器
思路和坑:step1.中缀表达式变后缀表达式(栈)解决两个问题,如何处理 数字, 如何处理 操作符。1.数字直接进入后缀表达式,但是有坑!字符类型的数字在中缀中是可以区分清楚的,例如12+13但是变成后缀1213+,那么字符类型就搞不定了。所以中缀表达式中的元素类型必须为自定义node类型2.操作符入栈,因为后缀表达式,优先级高的操作符一定在前面,所以,入栈前,需要将比该操作符高的...原创 2019-12-09 11:02:38 · 124 阅读 · 0 评论 -
图的最小生成树:Prim算法实现报告
Prim算法的原理见《算法笔记》p406下面来说说用代码怎么实现这个思路。首先,需要准备一个数组来记录一个每个顶点是在保护罩内(true)还是在保护罩外(false)。注意,这里并不需要两个数组(一个存所有在保护罩内的顶点,一个存所有在保护罩外的顶点,这样太麻烦了)。然后需要准备一个数组来记录所有顶点到保护罩的距离(weight),注意只要距离不是INFINETE,就说明一定能从保护罩...原创 2019-11-22 00:47:46 · 630 阅读 · 0 评论 -
算法与数据结构作业03:双链表的增删查改、设置头结点的具体好处分析、循环双链表的增删查改
双链表的增删查改实现思路基本与单链表相同。就再赘述了,这里分析下设置一个头结点的具体好处:设置了头结点之后,不论是遍历整个链表,还是找链表中的最后一个节点,还是找数据对应的节点。总之,凡是涉及到需要从头沿着链表执行的操作都因头结点的设置被统一了。如果没有头结点,这些操作都需要判断interface是不是指向空。例如,你刚创建了一个新链表,想要遍历这个链表的时候,如果没有头节点,inter...原创 2019-09-13 10:22:46 · 191 阅读 · 0 评论 -
CPPDay18:深度寻路算法的思路与实现
目录0x00:寻路算法分类:0x01:深度寻路算法的局限性0x02 设计实际地图:0x03 深度寻路算法思路:0x04 设计辅助地图0x05 寻路0x06 准备栈0x07命令行版本的动画显示:0x08 图形界面版本:0x00:寻路算法分类:深度寻路算法 广度寻路算法 A星寻路算法0x01:深度寻路算法的局限性只能应用于二维地图,并且只能走直线。...原创 2019-09-19 08:57:26 · 322 阅读 · 0 评论 -
CPPDay19:深入浅出广度寻路算法
目录0x00 存储实际地图:0x01 广度寻路算法的思路:0x02比较深度寻路与广度寻路:0x03 代码:深度寻路算法:先深挖再拓宽广度寻路算法:先拓宽从离散数学的角度来看,该图中每一个点都是一个四叉树。因为每个点都有4个方向可以走。所以图中每个点的存储结构使用四叉树。0x00 存储实际地图:和深度寻路算法的思路一样,首先我们需要将实际地图用一个二维数组...原创 2019-09-21 15:15:28 · 336 阅读 · 0 评论 -
CPPDay20 A星寻路算法
目录0x00 A星寻路算法的思路:0x01那么如何计算推测代价呢?0x02 代码版本一0x03代码版本2A星寻路算法是狄克斯特拉算法的优化。0x00 A星寻路算法的思路:广度寻路算法中,我们假设小人只能走上下左右四个方位。但是在A*寻路算法中,我们假设小人可以走如上图所示的八个方位。即小人可以走斜线,并且我们规定,走直线上下左右的代价为10,走斜线的代价为14。...原创 2019-09-23 13:13:49 · 443 阅读 · 0 评论 -
CPPDay21 STL:map、set 和平衡二叉树
目录0x00 map0x02 multimap0x03set数据结构与算法学习中遇到一些逻辑上的问题没有解决,不要认为这些问题是永远搞不定的,所谓的逻辑思维是可以通过多次地锻炼,多次地写代码去训练出来的,凭空产生一种思路是不可能的。但是如果能够自己去写一些代码,自己去实现一些数据结构 和算法,一开始就用老师的思路,或者书本上的思路,自己能够尝试把代码写出来,再自己尝试着改一改这个...原创 2019-10-01 17:36:20 · 988 阅读 · 0 评论 -
CDay22 图(图的初始化(二维数组进阶),图的遍历:广度遍历和深度遍历)
目录0x00 图的相关概念0x01 图——类的创建:0x02图的初始化的思路:(邻接矩阵版)1.那么如何开一个二维数组呢?2.如何将用户输入的边对应到二维数组中存储起来?执行结果:0x03图的初始化的思路:(邻接表版)执行结果:0x03图的遍历:0x00 图的相关概念顶点:用来保存数据。边:用来描述数据之间的关联。图的描述方式:临接矩阵:...原创 2019-10-03 14:45:37 · 861 阅读 · 0 评论 -
CPPDay23 哈希
目录0x00 哈希的组成:0x01 哈希表的增删改查0x02 三重哈希表0x00 哈希的组成:确定数据范围 合适的查找hash函数:根据数据 返回数据所在内存段首地址 解决冲突的方式0x01 哈希表的增删改查要求:用哈希表存储一些两位数示意图:首先,我们应该准备一个链表节点类型node 和一个 hash类,hash类中只需要一个成员变量,那就是数组的首地址...原创 2019-10-04 18:08:28 · 260 阅读 · 0 评论 -
算法与数据结构作业03:静态链表增删改查(C++实现)头结点的优点
目录0x00 为什么需要有静态链表?0x01 静态链表的节点类型 以及 链表类型的实现0x02静态链表的增0x03删:0x04改:0x05代码:0x06运行结果:0x00 为什么需要有静态链表?链表是一种插入删除效率O(1)高于数组O(n),但是查找、遍历效率低于数组的数据结构。在C++中我们实现链表中节点类型,通常会用指针类型来描述该节点指向哪一个节点(即pN...原创 2019-09-12 22:18:31 · 554 阅读 · 0 评论 -
CPPDay017[算法与数据结构] 堆的创建,堆排序
目录0x00 什么是堆?0x02 堆的创建:0x00 什么是堆?堆 是有序的完全二叉树。注意这里的有序指的是层之间有序。最小堆(小顶堆):根节点值最小。最大堆(大顶堆):根节点值最大。小顶堆的特性:孩子比父大。0x02 堆的创建:思路:首先,将数据直接存入到完全二叉树中。然后调整数据的顺序,让完全二叉树成为一个小顶堆。调整数据顺序的方法:类似于冒...原创 2019-09-07 10:20:35 · 244 阅读 · 0 评论 -
算法与数据结构作业02:有序表插入元素并保持其有序
#include <iostream>#include <string>#include <cstring>using namespace std;class va{ int* pRoot; int num;public: va(){ pRoot = new int[10]; for(int i= 0;i<10;i++){ ...原创 2019-09-05 22:42:12 · 1584 阅读 · 0 评论 -
CDay06(数据结构)用动态数组来实现栈和队列(动态内存分配,动态数组,栈,队列,时间复杂度,空间复杂度)
目录0x00动态内存分配一般用在什么地方?0x01动态内存分配实现动态的数据结构如何实现动态数组?栈:特殊的动态数组,只能够先入后出,后入先出。0x02作业:写一个队列0x00动态内存分配一般用在什么地方?数组必须规定大小,一定得等到程序结束,才能释放内存。为了防止内存浪费,我们一般都要使用动态内存分配。动态内存分配能够及时的把开出的内存释放掉,而不是等到程序...原创 2019-03-17 15:49:33 · 462 阅读 · 0 评论 -
CDay07 结构体
什么是数据结构?数据结构类似于日常生活中用到的塑料袋纸箱,是用来存东西的,即管理数据的结构,本身无意义;包括:变量,数组,动态数组(栈,队列),链表,树(二叉树,完全二叉树,堆(动态内存分配就是分配的堆内存,是用堆这种数据结构来管理的,而堆的本质就是树),平衡二叉树,哈夫曼树。。。),图,vector(动态数组),deque(双向动态队列),list(双向动态链表),map(图),hash...原创 2019-03-17 20:27:36 · 145 阅读 · 0 评论 -
CPPDay13:分治思想(归并排序、二分查找(循环,递归))
目录0x00 归并排序0x01 二分查找使用循环的思路:二分查找的C语言实现:python实现二分查找:使用递归的思路:什么叫分治思想?所谓分治思想,就是将一个大问题,转化为几个同一类型的小问题,即将大问题分而治之,小问题解决了,大问题便解决了。0x00 归并排序例如将数组中完全无序的数字排序 这个大问题 就可以分治成:将数组的右半部分(完全无序)排序 &g...原创 2019-08-26 16:54:31 · 567 阅读 · 0 评论 -
CPPDay08 模板(函数模板,模板函数,类模板,模板类)+如何用模板来写一个自己的栈(顺序栈,链式栈)
目录0x00模板:为了提升开发效率0x01用类模板来写一个自己的栈:1.顺序栈:2.链式栈0x00模板:为了提升开发效率#include <iostream>using namespace std;//函数模板template<typename T>//泛型可以对应任意类型 ,typename换成class也可以,不建议class和typen...原创 2019-01-24 17:01:17 · 271 阅读 · 0 评论 -
CPP[数据结构和算法]Day014 树,每个节点3个指针实现无序N叉树的增删改查,strcpy,memcpy,memset
目录0x00 基本概念:0x01 每个节点3个指针实现无序N叉树的增删改查0x03 附加:strcpy、memcpy和memset之间的区别0x00 基本概念:树结构应用广泛,上到应用程序(例如文件系统),下到底层,调度进程,线程,管理硬件都要用到树这种结构。多棵树在一起,且相互有关联,称之为森林树:一个根, 多个分叉 森林:多颗类似的树 节点:树里面每一个元素...原创 2019-03-02 22:59:13 · 320 阅读 · 0 评论 -
CPPDay011 STL概述(STL,容器,序列式容器(vector,list,deque)关系式容器(map,set,mulitmap,multiset)迭代器)
0x00STL:Standard Template Library 标准模板库,由两大部分组成,一部分称之为容器,另一部分称之为算法,它是C++语言自带的,别人已经写好,我们只要去用就ok了。0x01容器:我们需要用数据结构来管理数据,如果这个数据结构比较健壮一点,我们就将它称之为容器。包括:变量,数组,结构体,链表,顺序表,栈,队列等等对于学习者而言,首先要知道如何去用STL,然...原创 2019-02-23 22:58:46 · 260 阅读 · 0 评论 -
算法与数据结构:快速排序 C++和Python实现
目录0x00 对有n个变量的数组进行快速排序设计的思路:分治思想0x01python实现:0x02C++实现:0x00 对有n个变量的数组进行快速排序设计的思路:分治思想首先寻找最简单的情形(基线条件):即数组元素只有0个或者1个,那么不需要排序,直接返回即可然后考虑如何缩小问题的规模(递归条件):首先,随便选一个基准值 按照比基准值大 和 比基准值小 将原来的数组...原创 2019-09-02 14:09:54 · 136 阅读 · 0 评论 -
CPP[算法与数据结构]Day015 有序二叉树的增删改查,先序遍历,中序遍历,后序遍历
目录0x00 二叉树0x01 有序二叉树:0x02补充:二叉树的遍历:0X03升(降)序二叉树的增删改查0x00 二叉树二叉树:每个节点有且只有两个孩子(设计数据结构的时候,每个节点只设计两个指针:左节点和右节点)二叉树中的叶子节点:两个孩子都为NULL的节点。0x01 有序二叉树:升序二叉树:左节点 < 根节点 < 右节点,更准确的说,升序二...原创 2019-09-02 17:47:02 · 340 阅读 · 0 评论 -
CPPDay016[算法与数据结构] 数组实现完全二叉树
目录0x00 先序,后序,中序遍历的相互推导:0x01满二叉树:1.定义:2.特性:0x02完全二叉树:1.定义:2.特性:0x03 完全二叉树的增删查改0x00 先序,后序,中序遍历的相互推导:已知先序和中序可以推导出后序,已知中序和后序可以推导出先序,但是已知先序和后序却推导不出中序。例如:有一颗树如下: 先序遍历:ABDEGCFH中序遍历...原创 2019-09-06 13:44:46 · 539 阅读 · 0 评论 -
算法与数据结构作业:A∪(B∩C)以及时间复杂度分析
python实现:时间复杂度为O(n^2)#AU(B∩C)a = [1,2,4,5,7,8]b = [1,8,0,3,0,1,0,1,7]c = [2,3,5,7,9,11,13,15]temp = []print("before:")print("a:"+str(a))print("b:"+str(b))print("c:"+str(c))for bb in b: ...原创 2019-09-04 17:20:34 · 1383 阅读 · 0 评论 -
CDay08 链表
回顾:结构体占据的内存并非成员变量的简单加和,为了点这个智能指针寻址方便,结构体分配内存时有:对齐:相邻两个成员变量,参照占据内存大的分配内存补齐:结构体指针:指向一个结构体的指针数组>>优化>>动态数组>>队列和栈:保存多个相同类型的数据;增:在末尾添加速度快,在头部添加速度慢,因为在头部添加需要将数组中所有的数据往后挪一位删:效率...原创 2019-03-20 15:14:27 · 133 阅读 · 0 评论