数据结构
I_O_fly
身为一个喜欢算法的小菜鸡,喜欢自己自学
展开
-
动态线性表的操作
//ARRAY.H# ifndef ARRAY# define ARRAY# include <stdio.h># include <stdlib.h># include <string.h>/*线性表是零个或者多个数据元素的有限序列特性:数据原始之间是有顺序的;数据元素的个数是有限的;数据元素的类型必须相同过程如下:1.当插入一个新的元素的时候,这个时候发现空...原创 2018-03-07 18:02:06 · 516 阅读 · 0 评论 -
选择排序
//选择就是冒泡排序的改良版,先把当前最大最小的找到,然后在换,稍微减少了遍历的次数void SelectSort(int a[], int length){ int k = 0; //选择排序是减少交换次数 for(int i=0;i<length-1;i++)//开始从小到大排序 { k=i; for(int j=i+1;j<length;j++) if(...原创 2018-04-23 12:30:07 · 99 阅读 · 0 评论 -
插入排序
/*插入排序: 1.将无需序列插入到有序序列中 2.插入排序在什么情况效率高, 插入排序的时候 数据序列比较少*///插入排序是希尔排序的核心,希尔排序就是围绕着插入排序来写的插入排序的核心代码就是:for(int i = 1; i < length; i++){ if(a[i] < a[i - 1]) { int temp = a[i]; ...原创 2018-04-23 12:45:48 · 220 阅读 · 0 评论 -
排序算法的比较
原创 2018-04-23 13:01:10 · 125 阅读 · 0 评论 -
希尔排序
/*插入排序:1.元素序列基本有序的情况下2.元素个数比较小的时候希尔排序:1.分组 插入排序先分组 然后对每一组分别进行插入排序*///希尔排序的核心思想就是分组插入排序,比如10个数组分成n组,每组分别插入排序然后在合起来在插入排序,因为在合起来的时候比较有序所以费的时间,因此希尔排序又叫减少增量排序,以下是核心代码:void Shell_Sort(int arr[], int length)...原创 2018-04-23 14:44:22 · 168 阅读 · 0 评论 -
迪杰斯特拉
/*在网图和非网图中,最短路劲的含义是不同的-网图是俩顶点经过的边上权值之和最少的路劲-非网图是俩顶点之间经过的边数最少的路劲*/# include <iostream># include <numeric># include <algorithm># include <functional># include <list...原创 2018-04-23 17:57:29 · 213 阅读 · 0 评论 -
快速排序算法
快速排序算法的思想就是:分治的思想,先找一个基准数然后把大的放在一面小的放在另一面,然后递归继续找,当初大一研究了1个多月没弄懂现在大二学了搜索之后,感觉真的简单,发现有时候有的算法真的需要你的积累再去学,盲目学费时费力,最好是可以先放放等你水平上来在看。快速排序法 = 分治法 + 挖坑填数分治法:大问题分解成各个小问题,对小问题求解,使得问题解决1.从右向左开始找第一个小于基准数元素2.从左向右...原创 2018-04-25 08:47:04 · 171 阅读 · 0 评论 -
归并排序(原理以及实现代码)
归并排序是将俩个有序的序列合成一个序列的过程,在合并的时候俩个序列越有序合并的速度越快,归并排序的应用有很多,首先是应用在求逆序数上,我会将我自己做过的俩道用归并排序AC的题目放上来一道是(求逆序数)另一道是(稿件整理的题目2017ICPC内蒙古自治区省赛的题目当时还是大一萌新不会做,放到现在大二马上大三的我来说简直简单的不行,咳咳不说了继续我们的归并排序思路)它的原理就是先拆分数组里的元素:比如...原创 2018-05-06 20:06:45 · 335 阅读 · 0 评论 -
KMP(算法详解)
转载自:http://www.cnblogs.com/yjiyjige/p/3263858.htmlKMP算法应该是每一本《数据结构》书都会讲的,算是知名度最高的算法之一了,但很可惜,我大二那年压根就没看懂过~~~之后也在很多地方也都经常看到讲解KMP算法的文章,看久了好像也知道是怎么一回事,但总感觉有些地方自己还是没有完全懂明白。这两天花了点时间总结一下,有点小体会,我希望可以通过我自己的语言来...转载 2018-05-16 15:49:28 · 220 阅读 · 0 评论 -
迪杰斯特拉(用邻接矩阵适用于稠密图)
# include <iostream># include <numeric># include <algorithm># include <functional># include <list># include <map># include <set># include <stack原创 2018-05-22 22:07:10 · 951 阅读 · 0 评论 -
求n个点最短距离(分治思想)
转载自:https://blog.csdn.net/wangyangkobe/article/details/6436327感谢大佬的代码保存记录一下 #include <iostream>#include <ctime>#include <iterator>#include <functional>#include <algor...转载 2018-09-11 15:38:03 · 8072 阅读 · 1 评论 -
STL优先队列用法
转载自:http://www.cnblogs.com/summerRQ/articles/2470130.html优先级队列,以前刷题的时候用的比较熟,现在竟然我只能记得它的关键字是priority_queue(太伤了)。在一些定义了权重的地方这个数据结构是很有用的。先回顾队列的定义:队列(queue)维护了一组对象,进入队列的对象被放置在尾部,下一个被取出的元素则取自队列的首部。prio...转载 2018-10-18 16:10:47 · 897 阅读 · 0 评论 -
线段树从零开始(转载自一个写的非常好的大佬)
转载自:https://blog.csdn.net/zearot/article/details/52280189 线段树从零开始By 岩之痕一:为什么需要线段树?题目一:10000个正整数,编号1到10000,用A[1],A[2],A[10000]表示。修改:无统计:1.编号从L到R的所有数之和为多少? 其中1<= L <= R <= 10000.方法一...转载 2018-11-04 22:29:36 · 141 阅读 · 0 评论 -
线段树详解(同样转载自那个写的非常好的大佬)
转载自:http://blog.csdn.net/zearot/article/details/48299459 线段树详解By 岩之痕目录:一:综述二:原理三:递归实现四:非递归原理五:非递归实现六:线段树解题模型七:扫描线八:可持久化 (主席树)九:练习题一:综述假设有编号从1到n的n个点,每个点都存了一些信息,用[L,R]表示下标从L到R的这些点。线...转载 2018-11-04 22:31:51 · 199 阅读 · 0 评论 -
排兵布阵(线段树入门)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 127509 Accepted Submission(s): 53425 Problem Description C国的死对头A国...原创 2018-11-05 16:36:34 · 711 阅读 · 0 评论 -
I Hate It(区间最大值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 106034 Accepted Submission(s): 39810 Problem Description 很多学...原创 2018-11-05 19:22:05 · 234 阅读 · 0 评论 -
poj(3468)A Simple Problem with Integers(区间更新,区间查询)
Language:Default A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072K Total Submissions:145487 Accepted:45243 Case Time Limit:20...原创 2018-11-08 09:13:14 · 175 阅读 · 0 评论 -
Floyd-Warshall
//Floyd-Warshall算法//如果时间允许的话可以用很好用也比较简单//Floyd-Warshall算法核心语句 for(int k = 1; k <= n; k++) { for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(e[i][j] > e[i][k]...原创 2018-04-18 15:17:34 · 158 阅读 · 0 评论 -
排序的基本概念-以及最简单的排序-冒泡排序
//排序就是无序的数据按照有序的排列出来介绍一种入门的排序冒泡排序//因为比如是10个数我大方向只要排9次就好因为第10次一定已经排好因为我排一次最后面的数是最大或者最小,所以我只要排到它当前位置的前一个就好所以for(int j = 0; j < MAX - i - 1; j++)for(int i = 0; i < MAX - 1; i++) { for(int j = 0;...原创 2018-04-23 10:33:57 · 366 阅读 · 0 评论 -
二叉树的非递归遍历
# ifndef LINKSTACK_H# define LINKSTACK_H# include <stdio.h># include <string.h># include <stdlib.h>//链式栈的结点typedef struct LINKNODE{ struct LINKNODE* next;}LinkNode;//链式...原创 2018-04-18 15:13:30 · 129 阅读 · 0 评论 -
企业级业务链表
#ifndef LINKLIST_H# define LINKLIST_H# include <stdio.h># include <stdlib.h>//链表 小结点typedef struct LINKNODE{ struct LINKNODE* next;}LinkNode;//链表结点typedef struct LINKLIST{ LinkNode head; i...原创 2018-03-19 14:18:47 · 235 阅读 · 0 评论 -
线性表的链式存储
# ifndef LINKLIST_H# define LINKLIST_H# include <stdio.h># include <stdlib.h>//链表结点typedef struct LINKNODE{ //可以放任何数据就是无类型数组,指向任何类型数据 void* data; struct LINKNODE* next;}LinkNode;//链表结构体typ...原创 2018-03-14 09:10:19 · 291 阅读 · 0 评论 -
栈的应用就近匹配案例(自己手写的栈库并非STL里的栈库)
用的我自己手写的栈库来做的检测字符串里的左右括号是否匹配的一个小程序。# ifndef LINKSTACK_H# define LINKSTACK_H# include <stdio.h># include <string.h># include <stdlib.h>//链式栈的结点typedef struct LINKNODE{ stru...原创 2018-04-08 07:29:04 · 206 阅读 · 0 评论 -
中缀表达式转后缀表达式(用自己手写的栈库)
# ifndef LINKSTACK_H# define LINKSTACK_H# include <stdio.h># include <string.h># include <stdlib.h>//链式栈的结点typedef struct LINKNODE{ struct LINKNODE* next;}LinkNode;//链式...原创 2018-04-08 16:47:11 · 310 阅读 · 0 评论 -
栈的应用-后缀表达式求解
# ifndef LINKSTACK_H# define LINKSTACK_H# include <stdio.h># include <string.h># include <stdlib.h>//链式栈的结点typedef struct LINKNODE{ struct LINKNODE* next;}LinkNode;//链式...原创 2018-04-08 18:55:36 · 244 阅读 · 1 评论 -
循环链表
企业级循环链表,跟企业级链表写法一样最后都是运用类型在转换来查找,输出,相比传统释放的时候只需释放包装链表的结构体就好,而且写的很省事。测试代码如下:# ifndef CIRCLELINKLIST# define CIRCLELINKLIST# include <stdio.h># include <stdlib.h>typedef struct CIRCL...原创 2018-03-26 13:42:48 · 162 阅读 · 0 评论 -
栈的顺序存储
# ifndef SEQSTACK_H# define SEQSTACK_H# include <stdio.h># include <stdlib.h># include <string.h>//数组去模拟栈的顺序存储# define MAX_SIZE 1024# define SEQSTACK_TRUE 1# define SEQSTA...原创 2018-04-02 15:24:58 · 93 阅读 · 0 评论 -
红黑树(完整C代码实现过程)
转载自:weewqrer 红黑树转载链接:https://blog.csdn.net/weewqrer/article/details/51866488红黑树简介首先红黑树是一棵二叉搜索树,它在每个结点上增加了一个存储位来表示结点的颜色,可以是RED或者BLACK。通过对一条从根节点到NIL叶节点(指空结点或者下面说的哨兵)的简单路径上各个结点在颜色进行约束,红黑树确保没有一条路径会比其他路径长出...转载 2018-04-03 07:17:39 · 356 阅读 · 0 评论 -
企业级栈的链式存储
# ifndef LINKSTACK_H# define LINKSTACK_H# include <stdio.h># include <string.h># include <stdlib.h>//链式栈的结点typedef struct LINKNODE{ struct LINKNODE* next;}LinkNode;//链式...原创 2018-04-03 10:01:51 · 131 阅读 · 0 评论 -
树的定义及存储以及二叉树的遍历方式()
/*树的定义: 由一个或多个(n >= 0)结点组成的有限集合T,有且仅有一个结点称为根(root),当 n>1时,其余的结点分为m(m > 0)个相互不相交的有限集合T1, T2, ..., Tm。每个集合本身又是棵树,被称作这个根的子树。 树的结构特点: 1.非线性结构,有一个直接前驱,但可能有多个直接后继(1:n) 2.树的定义具有递归行,树中还有树。 3.树可...原创 2018-04-10 18:29:42 · 361 阅读 · 0 评论 -
企业级队列的顺序存储
# ifndef SEQQUEUE_H# define SEQQUEUE_H# include <stdio.h># include <string.h># include <stdlib.h># define MAX_SIZE 1024//顺序队列结构体typedef struct SEQQUEUE{ void* data[MAX_SI...原创 2018-04-03 15:48:51 · 149 阅读 · 0 评论 -
必须懂的二叉树公式
1、一般二叉树的性质 性质1、在非空二叉树的i层上,至多有2^i个结点。 性质2、高度为K的二叉树中,最多有2^(k+1)-1个结点。 性质3、对于任何一棵非空的二叉树,如果叶结点的个数为n0,度为2的结点个数为n2,则有n0=n2+1。 2、完全二叉树 定义:如果一棵二叉树中,只有最下面的两层结点度数小于2,其余各层结点度数都等于2,并且最下面一层的结点,都集中在该层最左边的若干位置上,则此二叉...原创 2018-04-11 17:09:47 · 4826 阅读 · 0 评论 -
求二叉树高度
/*树的定义: 由一个或多个(n >= 0)结点组成的有限集合T,有且仅有一个结点称为根(root),当 n>1时,其余的结点分为m(m > 0)个相互不相交的有限集合T1, T2, ..., Tm。每个集合本身又是棵树,被称作这个根的子树。 树的结构特点: 1.非线性结构,有一个直接前驱,但可能有多个直接后继(1:n) 2.树的定义具有递归行,树中还有树。 3.树可...原创 2018-04-12 15:23:04 · 1237 阅读 · 0 评论 -
求二叉树叶子结点个数
/*树的定义: 由一个或多个(n >= 0)结点组成的有限集合T,有且仅有一个结点称为根(root),当 n>1时,其余的结点分为m(m > 0)个相互不相交的有限集合T1, T2, ..., Tm。每个集合本身又是棵树,被称作这个根的子树。 树的结构特点: 1.非线性结构,有一个直接前驱,但可能有多个直接后继(1:n) 2.树的定义具有递归行,树中还有树。 3.树可...原创 2018-04-12 15:26:14 · 4138 阅读 · 0 评论 -
二叉树的拷贝和释放
/*树的定义: 由一个或多个(n >= 0)结点组成的有限集合T,有且仅有一个结点称为根(root),当 n>1时,其余的结点分为m(m > 0)个相互不相交的有限集合T1, T2, ..., Tm。每个集合本身又是棵树,被称作这个根的子树。 树的结构特点: 1.非线性结构,有一个直接前驱,但可能有多个直接后继(1:n) 2.树的定义具有递归行,树中还有树。 3.树可以为空,即结...原创 2018-04-18 15:11:09 · 424 阅读 · 0 评论 -
火柴排队
火柴排队时间限制: 1 Sec 内存限制: 128 MB提交: 11 解决: 4[提交] [状态] [讨论版] [命题人:外部导入]题目描述涵涵有两盒火柴,每盒装有n根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为: 其中ai表示第一列火柴中第i个火柴的高度,bi表示第二列火柴中第i 个火柴的高度。每列火柴中相...原创 2018-11-22 17:36:21 · 242 阅读 · 0 评论