数据结构与算法
qq_38530606
这个作者很懒,什么都没留下…
展开
-
数据结构与算法(七)
模块一:线性结构(所有的节点可以用一根线穿起来,首节点前没有节点,尾节点后没有节点,中间节点前后只有一个节点)连续存储(数组)离散存储(链表)线性结构的两种常见应用之一:栈线性结构的两种常用应用之一:队列动态数组的构建和操作(添插删序)#include <stdio.h>#include<malloc.h>//包含malloc函数#include<st...原创 2019-01-10 20:00:55 · 121 阅读 · 0 评论 -
汉诺塔(递归)
任务:A借助B将n个盘子移动到C规则:一次只能移动一个盘子,且大盘子永远在下面任务 = 伪算法 + 子任务;n不能太大,n = 64 时 2的64次方-1是一个天文数字...原创 2019-03-20 11:18:55 · 102 阅读 · 0 评论 -
树的存储
树的定义:专业定义:1、有且仅有一个称为根的节2、有若干个互不相交的子树,这些子树本身也是一棵树通俗定义:1、树是由节点和边组成2、每个节点只有一个父节点但可以有多个子节点3、但有一个节点例外,该节点没有父节点,此节点称为根节点专业术语:节点 、父节点、子节点、子孙、堂兄弟深度:从根节点到最底层节点的层数称为深度,根节点是第一层叶子节点:没有子节点的节点非终端节点:非叶子节...原创 2019-03-20 16:49:39 · 329 阅读 · 0 评论 -
树的操作
二叉树的操作一、遍历先序遍历:先访问根节点,再先序遍历左子树,再先序遍历右子树。中序遍历:中序遍历左子树,再访问根节点,再中序遍历右子树后序遍历:后序遍历左子树,后序遍历右子树,再访问根节点二、已知两种遍历序列求原始的二叉树只有通过先序和中序 或者通过中序和后序才能还原二叉树1、已知先序和中序求后序通过先序填节点,中序来判断左右子树2、已知中后序求先序通过后序填节点,中序判断左...原创 2019-03-20 20:18:16 · 96 阅读 · 0 评论 -
AVL树
AVL树又叫高度平衡二叉树,其本质就是平衡搜索二叉树,同时满足搜索二叉树和平衡二叉树的条件搜索二叉树(二叉搜索树):左子树小于该节点,该节点小于右子树,对于任意的节点都成立。平衡二叉树:任意节点的左右子树的高度差不超过1。怎样构建一个AVL树,可以参考下面的链接https://www.cnblogs.com/skywang12345/p/3576969.html补充一点:判断四种组合类型...转载 2019-06-13 17:18:01 · 68 阅读 · 0 评论 -
背包系列问题
一 、01背包问题概念:每件物品只可以取一次解题思路:看最后一件物品能不能进背包的问题最值型问题n种物品,已知每种物品的重量,背包能承受重量w,求最大能装的重量 public class Bag010 { public static int bag0(int[] arrW,int w) { boolean[][] dp = new boolean[arrW.len...原创 2019-08-20 17:07:22 · 141 阅读 · 0 评论 -
版本的比较(java)
版本的比较不能直接用字符串的比较,先分割,相同级别比较(比较长度,比较大小)import java.util.*;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) {...原创 2019-09-01 09:59:32 · 152 阅读 · 0 评论 -
最小调整代价
Minimum Adjustment Cost【题目】Given an integer array, adjust each integers so that the difference of every adjacent integers are not greater than a given number target.If the array before adjustment...原创 2019-09-02 23:03:48 · 183 阅读 · 0 评论 -
棋盘系列问题
1.一个m*n的迷宫,部分格子上有障碍物,现在需要在左上角走到右下角,返回走的步数最少的方案的步数。 //暴力递归有很多条路可以走,用fla来表示当前这条路走过的痕迹,cnt来表示当前这条路走到这个点时走的步数, //只有当这条路能够走到最后,才算走通,这个时候用一个全局变量来比较每条路的cnt,选出最小的那个 //难点是要将cnt设置成局部变量,flag设置成局部(java语...原创 2019-09-04 09:45:01 · 504 阅读 · 0 评论 -
打印二叉树
输入是1(2(3,4(,5)),6(7,))输出是中序遍历3245176 static String solution(String input) { if(input.equals("") || input == null) { return input; } return func(input); } ...原创 2019-09-06 22:48:33 · 137 阅读 · 0 评论 -
分割数组最大值的最小值
给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5] 和 [10,8],因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。来源:力扣(L...原创 2019-09-07 12:08:50 · 1159 阅读 · 0 评论 -
数据结构与算法(十四)
递归定义:一个函数自己直接或间接调用自己函数的调用主调函数调用被调函数之前系统先要完成三件事:一将实参和返回地址传递给被调函数保存,二为被调函数的局部变量分配存储区,三将控制转移被调函数入口,而从被调函数返回主调函数之前,系统也要做三件事,一是保存被调函数的结果,释放被调函数的数据区,三依照被调函数保存 的返回地址将控制权限给主调函数。当有多个函数嵌套调用时:按照“后调用先返回”的规则,上述...原创 2019-01-14 18:11:14 · 93 阅读 · 0 评论 -
数据结构与算法(十三)
队列的操作(初始化,入队,出队,遍历,满,空) #include<stdio.h> #include<malloc.h> typedef struct Queue{ int * pBase; int front; int rare;}QUEUE,*PQUEUE;void init(PQUEUE pQ){ pQ->pBase = ...原创 2019-01-14 16:22:05 · 94 阅读 · 0 评论 -
数据结构与算法(六)
跨函数使用内存函数被调用后,内存会被自动释放(操作系统拿回这块内存的操作权限,但是硬件上的内存还是有垃圾数据的,所以定义变量时都会初始化),这样就不能跨函数使用内存,可以使用malloc()函数来动态分配内存,不调用free()函数不会释放内存,直到所以所以程序执行完后才会释放。列子:#include<stdio.h>#include<malloc.h>#incl...原创 2019-01-08 19:53:34 · 155 阅读 · 2 评论 -
数据结构与算法(五)
malloc函数动态内存分配和释放#include <stdio.h>#include <malloc.h>int main(void){int a[5] = {1,2,3,4,5};//静态内存分配int len;printf(“请输入数组的长度:len = “);scanf(”%d”,&len);int * b = (int *)malloc(...原创 2019-01-08 17:00:05 · 101 阅读 · 0 评论 -
数据结构与算法(四)
结构体(1)为什么出现结构体为了表达一些复杂的数据,而普通的基本数据类型变量无法表示(2)什么是结构体结构体是用户根据自己的需求定义的一种新的数据类型(3)如何使用结构体两种方式struct Student{int number;char name[200];int age;};int main(void){struct Student st = {20,“xu”,2...原创 2019-01-08 16:23:02 · 69 阅读 · 0 评论 -
数据结构与算法(三)
一维数组和一维指针如何使用被调函数来修改主调函数里面的一维数组(1)实参:一维数组名,数组的长度(2)形参:int *指针变量,int 普通变量(3)在被调函数中对指针变量进行操作double *p(1)p存储的是double类型变量的地址,虽然double类型的变量占8个字节,但是p只存储第一个字节的地址(一个字节是一个地址),p只占四个字节。所有的指针变量都是占四个字节...原创 2019-01-07 21:53:38 · 167 阅读 · 0 评论 -
数据结构与算法(二)
指针和数组一维数组int a[5]一维数组名a是一个指针常量,它存储的是一维数组第一个元素的地址,它的值不能改变,它指向一维数组的第一个元素;下标和指针的关系:a[1]等价于*(a+1)假设指针变量的名字为p(p + i) 存储的值 = p存储的值 + i*(p指向变量的长度)指针变量的运算(1)指针变量不能相加,相乘,相除(2)如果两个指针变量属于同一个数组,可以相减(3)指针...原创 2019-01-07 20:16:00 · 90 阅读 · 0 评论 -
数据结构与算法学习(一)
数据结构概述定义:我们如何将现实生活中大量而复杂的问题以特定的数据类型(个体的存储)和存储结构(个体关系)保存到主存储器(内存),以及在此基础上为实现某个功能(查找某个元素,删除某个元素,对所有元素排序等)而执行相应的操作,这个相应的操作,就是算法。(存储和操作)数据结构 = 个体 + 个体关系算法 = 对存储数据的操作算法:解题的方法和步骤衡量算法的标准1、时间复杂度大概程序要执...原创 2019-01-07 18:26:36 · 317 阅读 · 0 评论 -
数据结构与算法(八)
typedef给数据类型另外取一个名字,之前的名字也可以正常使用#include<stdio.h>typedef double D;//D<==>doubletypedef struct Student{ int age; char name[20]; int num;}* PST,ST;//PST<==>struct Student *,ST...原创 2019-01-11 11:30:18 · 107 阅读 · 0 评论 -
数据结构与算法(九)
非循环单链表的算法(遍历,查找,清空,销毁,求长度,插入,删除)p指向一个节点x,q指向新添节点,要求在x之后插入一个节点伪代码://方法一t = p->pnextp->pnext = qq->qnext = t//方法二q->qnext = p->pnextp->pnext = q删除p指向节点的后面一个节点r = p->pn...原创 2019-01-11 15:29:56 · 181 阅读 · 0 评论 -
数据结构与算法(十)
链表的操作(遍历、查找、清空、销毁、求长度、增加、删除)创建一个链表:需要三个指针(头指针、始终指向尾节点的指针(刚开始让其指向头结点)、新创节点指针)遍历:需要一个指针P,刚开始指向首节点,用while(NULL!=P)来循环,在循环里面更新指针P,P = P-&gt;pNext,让其指向下一个节点。...原创 2019-01-13 15:08:54 · 91 阅读 · 0 评论 -
数据结构与算法(十一)
连续存储(数组)优点:存取速度快缺点:插入、删除操作速度慢,空间通常有限制,事先必须知道数组的长度,需要大块连续内存。离散存储(链表)优点:插入删除的速度快,空间没有限制缺点:存取速度慢线性存储的应用:栈内存有两种,动态内存和静态内存,静态内存是在栈里面分配的,动态内存是在堆里面分配的,局部变量和静态变量以压栈出栈的方式来存储的,由操作系统来完成,动态变量是以堆排序的方式来存储的,由...原创 2019-01-13 19:11:14 · 107 阅读 · 0 评论 -
数据结构与算法(十二)
栈的应用函数的调用内存的分配表达式求值中断缓冲处理迷宫队列(front,rear,出队,入队)定义:一种可以满足“先进先出”的存储结构类别: 链式队列(用链表实现)、静态队列(用数组实现)静态队列通常都是循环队列循环队列的问题(1)静态队列为什么必须是循环队列(2)循环队列需要几个参数确定需要两个参数来确定front/rare,这两个参数不同场合有不同的含义(3)循环...原创 2019-01-14 15:09:47 · 171 阅读 · 0 评论 -
二叉树按层遍历
题意:第一行是一个数表示N个二叉树节点,接下来N行代表0~N-1节点编号第一个数表示节点值,第二个数表示左指针指向的节点的编号,第三个数表示右指针指向的节点编号,如果为null,用-1表示。求这个二叉树的按层遍历,每层一行。输入82 -1 -11 5 34 -1 62 -1 -13 0 22 4 77 -1 -12 -1 -1输出1 2 2 3 2 2 4 7...原创 2019-09-07 22:17:54 · 230 阅读 · 0 评论