
数据结构与算法
奋斗不悔
这个作者很懒,什么都没留下…
展开
-
链栈和队列基础知识
1、对于链栈来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间了,如果真的发生,那此时计算机操作系统已经面临斯基崩溃,而不是这个链栈是否溢出的问题。2、(以上内容纯属本人大话数据结构概括整理,如有错误,欢迎批评指正)原创 2017-03-24 10:33:44 · 1299 阅读 · 0 评论 -
通俗易懂看RB-tree(一)
RB-tree首先RB-tree是一颗二叉搜索树。 特点: 结点非红即黑。 根节点为黑。 如果结点为红,则子结点必为黑。 任一结点至NULL的任何路径,所含黑结点树必须相同。 由规则4可知:新增结点必为红。 由规则3可知:新增结点之父结点必为黑。插入结点状况1:状况1:S为黑且X为外侧插入,对此情况,我们先对P,G做一次单旋转,并更改P,G颜色,即可重新满足原创 2017-08-28 21:13:59 · 666 阅读 · 0 评论 -
动态规划-直方图内最大矩形
题目来源:直方图内最大矩形有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。动态规划方法,构建动态数组dp[i][j],含义是从第i个元素到原创 2017-08-26 21:57:02 · 2606 阅读 · 0 评论 -
动态规划-最优编辑
题目:对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串,定义c0,c1,c2分别为三种操作的代价,请设计一个高效算法,求出将A串变为B串所需要的最少代价。给定两个字符串A和B,及它们的长度和三种操作代价,请返回将A串变为B串所需要的最小代价。保证两串长度均小于等于300,且三种代价值均小于等于100。根据动态规划特点,定义二维数组来实现转化代价的原创 2017-08-25 13:55:56 · 573 阅读 · 0 评论 -
关于动态规划算法
在暴力搜索基础上,增加了记忆机制而减少了时间复杂度,动态规划是一种以空间换时间的快速算法。经典例题:找零钱问题:用n种货币,组成aim的钱数,有多少种方法;法一:初始化一个二维数组dp[n][aim],行数为n,列数为aim。dp[i][j]含义为用penny[0...i]的货币组成j的钱数有多少种方法。递归公式:dp[i][j]=dp[i][i-penny[i]]+dp[原创 2017-08-13 15:35:38 · 295 阅读 · 0 评论 -
堆排序
思路:首先建立最大堆,然后依次交换根节点与最后一个元素,依次删除最后一个元素,重新建立最大堆。注意:根节点是从0开始计数。void swap(int *a,int *b){ int t=*a; *a=*b; *b=t;}void PercDown(int A[],int p,int N){//将N个结点以p为根节点的堆调整为最大堆;//此时堆根节点从0开始计数; in原创 2017-05-24 16:33:07 · 213 阅读 · 0 评论 -
2017春招笔试编程题-买帽子
要去商场买一顶帽子,商场里有N顶帽子,有些帽子价格可能相同,要买一顶价格第三便宜的帽子,请问第三便宜的帽子价格是多少?输入:首先输入一个正整数N(N输出:如果存在第三便宜的帽子,请输出这个价格是多少?否则输出-1.输入例子:1010 10 10 10 20 20 30 30 40 40 输出:30#include #include #in原创 2017-05-19 20:48:48 · 737 阅读 · 0 评论 -
归并排序-递归实现
//归并排序-递归实现void Merge(int A[],int TmpA[],int L,int R,int RightEnd){ int LeftEnd,Num,Tmp;//记录左边最后元素,元素总数,临时变量用来遍历; int i; LeftEnd=R-1; Tmp=L; Num=RightEnd-L+1; while(L<=LeftEnd&&R<=RightEnd)原创 2017-05-26 22:13:58 · 224 阅读 · 0 评论 -
关于并查集
大白话解析:如果两个元素分属于两个不同的集合,则将包含两个元素的所有集合都合并;如果两个集合属于同一集合,则两个元素是连通的,反之,不连通。例子: 现有时十台电脑,分别为1,2,3,4,5,6,7,8,9,10。1与2连接,2与3,连接,3与5连接,5和9连接,问1与5是否连接?很明显1与5属于同一集合,连接。用树来表示集合,树的每个结点代表一个集合元素。用数组来存原创 2017-05-16 15:02:37 · 297 阅读 · 0 评论 -
关于弗洛伊德算法
弗洛伊德算法是求多源最短路径的一种算法。算法要点:对于每一对顶点u和v,看看是否存在一个顶点w使得u到w再从w到v比已知路径更短,如果是则更新它。该算法是一种动态规划算法,稠密图效果最佳,边权可正可负。缺点:时间复杂度较高,不适合计算大量数据。时间复杂度:N^3代码: #include "stdio.h" #include "stdlib.h" #incl原创 2017-05-16 09:21:14 · 468 阅读 · 1 评论 -
浙大数据结构课后题-堆的路径
建立最小堆#define MAXN 1001#define MIXH -10001int H[MAXN], size;void creat()//最小堆{ size = 0; H[0] = MIXH;//设置岗哨;}void Insert(int X){ int i; for (i = ++size; H[i / 2] > X; i /= 2) H[i] = H[i原创 2017-04-24 22:24:22 · 329 阅读 · 0 评论 -
横空出世-微软等公司数据结构+算法面试100题
横空出世,席卷互联网 ---评微软数据结构+算法面试100题作者:July。时间:2010年10月-11月。出处:http://blog.youkuaiyun.com/v_JULY_v。说明:本文原题为:“横空出世,席卷Csdn [评微软等转载 2017-05-15 11:18:11 · 550 阅读 · 0 评论 -
建立最大堆
建立最大堆与删除最大堆根节点算法类似,都需要依次下滤父结点。typedef struct HNode *Heap;struct HNode{ int *Data;//存储元素的数组; int size; int capacity;};typedef Heap MaxHeap;typedef Heap MinHeap;#define MAXDATA 1000MaxHeap原创 2017-05-24 15:39:59 · 1029 阅读 · 0 评论 -
最大堆小习题
建堆时,最坏情况下需要挪动元素次数是等于树中各结点的高度和。问:对于元素个数为12的堆,其各结点的高度之和是多少?A. 10B. 11C 12D 15良心解答:首先,堆是一个完全二叉树;其次,这个是求的需要下沉的结点的高度和;最后,分析,最后一层5个元素,第7个结点是叶子结点,高度是0,4,5,6最多下沉一次,高度为1,2,3原创 2017-05-24 09:54:05 · 1965 阅读 · 0 评论 -
二叉树—判断是否同一棵树
搜索树表示;建立搜索树;判断序列与搜索树是否一致;#define _CRT_SECURE_NO_WARNINGS#include "stdlib.h"#include "stdio.h"//搜索树表示typedef struct TreeNode *Tree;struct TreeNode{ int v; Tree left; Tree right; int flag;/原创 2017-04-20 10:29:08 · 583 阅读 · 0 评论 -
浙大数据结构课后题-最大子列和
动态规划法 int MaxSubseqSum1(int A[], int N){ int ThisSum, MaxSum; ThisSum = MaxSum = 0; for (int i = 0; i < N; i++) { ThisSum += A[i]; if (ThisSum > MaxSum) MaxSum = ThisSum; else if原创 2017-04-18 20:43:26 · 653 阅读 · 0 评论 -
关于链表
头指针和头结点把指向第一个结点的指针称为头指针,每次访问链表时可以通过这个头指针来遍历链表中的每个元素;struct node first;struct node *head=&first;遍历链表:while(head){printf("%d\n",head->data);head=head->next;}可以没有头结原创 2017-04-02 17:01:19 · 383 阅读 · 0 评论 -
通俗易懂看RB-tree(二)
RB-tree结点设计codes:typedef bool rb_tree_color_typeconst rb_tree_color_type rb_tree_red=false;const rb_tree_color_type rb_tree_black=true;struct rb_tree_node_base { typedef rb_tree_color_typ原创 2017-08-28 21:28:38 · 490 阅读 · 0 评论