自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fpk2014的博客

如果发现bug,请留下您宝贵的意见。

  • 博客(33)
  • 收藏
  • 关注

原创 C语言 KMP算法

KMP算法简介 KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。时间复杂度O(m+n)。KMP算法通过确定有限状态自动机DFA实现。实现过程字符串ABABAC的DFA: 通过DFA搜索字符串BCBAABACAABABACAA: 代码实现#include <stdio.h>#include <m...

2018-06-18 02:26:22 752 1

原创 C语言 确定有限状态自动机 DFA

确定有限状态自动机简介实现过程实现分析代码实现确定有限状态自动机简介 有限状态自动机拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。DFA是理解KMP算法的基础。 关于什么是DFA,可参考链接:有穷自动机DFA&NFA本篇的主要目的是实现DFA。实现过程下面是一个字符串ABABAC的DF...

2018-06-18 02:00:14 4438

原创 C语言 数据结构

排序排序插入排序 希尔排序 冒泡排序 快速排序 归并排序

2018-06-17 18:13:19 565

原创 C语言 单词查找树 Trie树

单词查找树简介代码实现单词查找树简介 Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。单词查找树的模拟过程可以看链接:Prefix tree...

2018-06-17 17:48:33 3465 2

原创 C语言 三向字符串快速排序

三向字符串快速排序 在将字符串数组排序时,根据首字母进行三向切分,然后(递归地)将得到的三个子数组排序:一个含有所有首字母小于切分字符的字符串子数组,一个含有所有首字母等于切分字符的字符串的子数组(排序时忽略它们的首字母),一个含有所有首字母大于切分字符的字符串的子数组。代码实现#include <stdio.h>#include &am

2018-06-16 08:53:25 708

原创 C语言 高位优先的字符串排序

高位优先的字符串排序与低位优先的相比,高位优先可用于不等长的字符串如果字符串的长度为W,那就从左向右以每个位置的字符串作为键,用键索引计数法将字符串排序W遍。实现要点在于处理不等长的字符串。通常,我们可以将字符串看成是等长的,将‘\0’作为字符串的一部分加入排序。所以我们的排序是以0为第一组进行频率统计的。 将一个字符串数组排序时,首先根据他们的首字母用键索引计数法进行排序,然后...

2018-06-15 11:14:26 858

原创 C语言 低位优先的字符串排序

低位优先的字符串排序用于等长字符串中,比如电话号码,IP地址等。如果字符串的长度为W,那就从右向左以每个位置的字符串作为键,用键索引计数法将字符串排序W遍。代码实现#include <stdio.h>#include <malloc.h>#include <memory.h>#include <assert.h&amp

2018-06-15 11:06:24 542

原创 C语言 键索引计数法

键索引计数法简介实现过程代码实现键索引计数法简介 键索引计数法是低位优先(LSD),高位优先(MSD)的字符串排序算法的基础实现过程键索引计数法一般为五个步骤: 1. 频率统计 2. 将频率转换为索引 3. 数据分类 4. 回写比如我们需要将一个班级的学生按照分组来排序。 1. 频率统计, 统计不同分组有多少个学生 ...

2018-06-15 10:42:19 518

原创 C语言 哈希表

哈希表简介哈希函数哈希冲突拉链法代码实现线性探测法代码实现哈希表简介 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。哈希函数得到一个数的hash值的函数,被称为哈希函数。 1. 整数 除留余数法, 对于大小为素数M的数组,对于任意正整数k,计算k除...

2018-06-14 10:52:26 743

原创 C语言 拓补排序 有向无环图

拓补排序简介实现过程代码实现拓补排序简介 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前首先需要知道一个概念:入度。 通常指有向图中某点作为图中边的终点的次数之和。比如: ...

2018-06-13 11:58:51 895

原创 C语言 最短路径之Dijkstra算法 无向图

Dijkstra算法简介实现过程代码实现Dijkstra算法简介 Dijkstra算法是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。 实现过程Dijkstra算法和Prim算法非常相似(参照链接:C语言 Prim算法和Kruskal算法的实现和证明)从上面可以看出,Dijkstra算法只是比...

2018-06-12 15:39:19 10613 1

原创 C语言 union-find算法 图的连通性

连通分量代码实现ADTquick-find算法quick-union算法quick-find和quick-sort的完整代码连通分量任何连通图的连通分量只有一个,即是其自身,非连通的无向图有多个连通分量。 比如: 图(a)的连通分量只有一个,而图(b)的连通分量有6个。现在有数据如下,怎么判断有多少个连通分量? int e[10][...

2018-06-08 15:53:09 1092 3

原创 C语言 优先队列

优先队列优先队列相比队列多了一个功能,就是自动排序代码实现#include <stdio.h>#include <malloc.h>#include <memory.h>#define QUETYPE chartypedef struct node { QUETYPE data; st

2018-06-07 21:57:54 2568

原创 C语言 Prim算法和Kruskal算法的实现和证明

最小生成树简介原理Prim算法算法实现算法证明Kruskal算法算法实现算法证明最小生成树简介最小生成树(MST):给定一加权无向图,找出它的一颗最小生成树。 定义:图的最小生成树是它的一副含有其所有顶点的无环连通子图。一副加权图的最小生成树是它的一颗权值(树种所有边的权值之和)最小的生成树。我们约定: 1. 只考虑连通...

2018-06-06 17:15:06 3905 2

原创 C语言 图的广度优化搜索

图的广度优化搜索简介实现过程代码实现图的广度优化搜索简介 所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。一般的实现里,其邻居节点尚未被检验过的节点会被放置在一个被称为 open 的容器中(例如队列或是链表),而被检验过的节点则被放置在被称为 closed 的容器中。(open-closed表)与深度优化搜索相比,深度优化搜索并不...

2018-06-05 02:17:40 289

原创 C语言 队列

队列简介代码实现队列简介 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。即: * 插入:只能插入在链表最后 * 出队:只能从队头出代码实现ADT:#include &l...

2018-06-05 01:20:27 472

原创 C语言 图的深度优化搜索

深度优先遍历简介实现过程代码实现深度优先遍历简介 深度优先遍历图的方法是,从图中某顶点v出发: (1)访问顶点v; (2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问; (3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。 ...

2018-06-04 21:56:23 898

原创 C语言 图的领接矩阵与邻接表

领接矩阵使用一个V*V的布尔矩阵。当结点a与结点b有连接时,定义a行b列的元素值为true,否则为false。 所以我们需要一个V^2大小的数组。需要的内存空间要求很大。 注:以下图片取自:数据结构(七)图代码实现#include <stdio.h>#include <malloc.h>#include <memory.

2018-06-03 19:59:37 2490

原创 C语言 栈

栈简介代码实现栈简介 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。对...

2018-06-02 23:05:25 205

原创 C语言 2-3树

2-3树简介实现过程代码实现2-3树简介 2-3树是最简单的B-树(或-树)结构,其每个非叶节点都有两个或三个子女,而且所有叶都在统一层上。2-3树的模拟过程可以看链接:InsertSortion实现过程在2-3树中,一个结点只有一个值的我们称为2-结点,有两个值的称为3-结点,在2-3树中,一个结点最多只有两个值,即3-结点。 ...

2018-06-01 01:16:16 2802 2

原创 C语言 红黑树

红黑树简介实现过程代码实现红黑树简介 红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。红黑树的模拟过程可以看链接:InsertSortion红黑树有五个性质: 性质1. 节点是红色或黑色。 性质2. 根节点是黑色。 性质3. 每个叶节点(NIL节点,空节点)是黑色的。 性质4. 每个红色节点的两个子节...

2018-05-29 13:25:20 706

原创 C语言 AVL树

AVL树简介实现过程代码实现AVL树简介 AVL树的基本操作一般涉及运做同在不平衡的二叉查找树所运做的同样的算法。但是要进行预先或随后做一次或多次所谓的”AVL 旋转”。AVL树的模拟过程可以看链接:AVLtree对于AVL树的详细简介和实现过程可以参照链接:数据结构图文解析之:AVL树详解及C++模板实现我在这里主要是选出重点:AVL...

2018-05-28 21:47:06 825

原创 C语言 二叉搜索树

二叉搜索树简介实现过程个人分析实现过程二叉搜索树简介 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。...

2018-05-27 02:23:55 286

原创 C语言 堆排序

堆排序简介实现过程构建大根堆:代码实现代码精简堆排序简介 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆。时间复杂度为O (nlgn)。堆排序的模拟过程可以看链接:HeapSortion大根堆:大根堆要求根节点的关键字...

2018-05-26 14:21:50 551

原创 C语言 归并排序

归并排序简介实现过程代码实现归并排序简介 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,时间复杂度为O(nlog₂n) 。归并排序的模拟过程可以看链接:MergeSortion实现过程为了比较容易地理解插入排序,我们可以列出一组数据...

2018-05-25 20:28:13 1157

原创 C语言 快速排序

快速排序简介实现过程代码实现代码精简快速排序简介 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列,是对冒泡排序的一种改进。时间复杂度为O(nlogn)。快速排序的模拟过程可以看链接:Quick...

2018-05-25 18:59:32 507

原创 C语言 冒泡排序

冒泡排序简介实现过程第一种第二种代码实现代码精简冒泡排序简介 冒泡排序的基本操作就是将重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,时间复杂度为O(n^2)。冒泡排序的模拟过程可以看链接:BubbleSortion实现过程为了比较容易地理解冒泡排序,我们可以列出一组数据,比如: 5,6,4...

2018-05-24 22:35:53 432

原创 C语言 选择排序

选择排序简介实现过程代码实现代码精简选择排序简介 它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完,时间复杂度为O(n^2)。选择排序的模拟过程可以看链接:SelectSortion在看具体代码实现之前,需要先看我之前的文章中关于选择排序的代码实现:选择排序实现过...

2018-05-24 21:41:32 2085 1

原创 C语言 希尔排序

希尔排序简介实现过程第一种第二种代码实现代码精简希尔排序简介 希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本,时间复杂度为O(n^2)。希尔排序的模拟过程可以看链接:ShellSortion在看具体代码实现之...

2018-05-24 20:49:38 417

原创 C语言 插入排序

插入排序简介实现过程第一种第二种代码实现个人分析代码精简插入排序简介 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。插入排序的模拟过程可以看链接:InsertSortion实现过程为了比较容易地理解插入排序,我们可以列出...

2018-05-24 18:09:23 4256

原创 汇编代码,传递指针给函数

如果传递指针给函数long cread(long *p){ ;}那么 [di], 代表了p的值。 di, 代表了&p的值。 [[di]], 代表了*p的值(注:[[di]]这样写是为了帮助理解)而在函数long cread(long p){ ;}[di], 同样代表了p的值, di, 同样代表了&p的值。注,上面的汇编代码是Intel格式。

2017-06-11 11:25:04 1491

原创 汇编代码,小括号和中括号

编译时添加编译条件 –masm=intel, 或者–masm=att,会生成Intel格式或者AT&T格式的代码;在Intel格式中使用[], 而AT&T格式则不一样。AT&T: -4(%ebp) //相当于 Intel: [ebp - 4]AT&T: foo(,%eax,4) //相当于 Intel: [fo

2017-06-11 11:18:13 16288

原创 使用位运算实现有符号的十进制正负数转二进制输出

利用位运算实现有符号的十进制正负数转二进制,C语言#include <stdio.h>void moveBinaryNum(unsigned int x){ int a = x >> 1; if (a) moveBinaryNum(a); if ((x - a) == a) putchar(0); else putch

2017-04-30 22:58:20 671

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除