自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 KMP模式匹配算法

KMP匹配算法,相比朴素匹配算法,可以大大避免重复遍历的情况。KMP匹配算法在匹配不相同时,不是重新返回开始处进行比较,而是退回尽可能远的字串位置在进行比较,这样可以大大减少重复比较。KMP匹配算法关键在于求出串应该退回的地方,在KMP匹配算法中,定义了一个next数组进行记录串应该返回的地方。next数组的长度为子串的长度,其推导方法为:求next数组代码为:求next数组其实就相当于...

2020-04-19 17:39:06 437

原创 数据结构初学

数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别并输入给计算机处理的符号集合。数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理,也被成为记录。数据项:一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位。数据对象:是性质相同的元素的集合,是数据的子集。数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。算法:是解决特定问...

2020-03-31 18:52:01 186

原创 01背包和完全背包问题与搜索

01背包问题需要求解的就是,为了体积V的背包中物体总价值最大化,NN件物品中第ii件应该放入背包中吗?(其中每个物品最多只能放一件)。 为此,我们定义一个二维数组,其中每个元素代表一个状态,即前ii个物体中若干个放入体积为VV背包中最大价值。数组为:f[N][V],其中f[i][j]表示前ii件中若干个物品放入体积为jj的背包中的最大价值。状态转移方程: F[i,v] = max{F[i-1,v...

2020-02-16 18:31:29 342

原创 c语言中的队列和栈

队列是一种特殊的线性结构,他只允许在队列的首部(head)进行删除操作删除操作,这被称为“出队”,而在队列的尾部(tail)进行插入操作,这称为“入队”。他的原则被称为“先进先出”。队列有三个基本元素,一个数组,两个变量(head,tail)。可以将队列封装成一个结构体类型:这里有一个简单的问题可以更好的理解队列:有一串进过加密数字,要对其进行解密,规则为,首先将第一个数删除,接着再将第二...

2020-02-02 17:49:59 822 1

原创 简单排序方法总结—冒泡,选择,插入,桶排序

冒泡排序:基本思想:每次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。即如果有n个数进行排序,就要进行n-1趟操作。而每一趟都要从第一位开始进行相邻两个数的比较,重复此步骤直到最后一个尚未归位的数,已经归位的数则无需再进行比较。代码如下:选择排序:基本思想:每一次从待排序的数据元素中选择一个最小(或最大)的数据元素,放在序列的起始位置,然后再从未排序的数据元素中选择一个最小(或...

2020-01-26 17:55:17 280

原创 c语言中的快排及优化

快速排序被称为最常用的排序,他的主要思想是,利用某个基准数,将其比基准数大或小分别放在基准数的两边,让后在两边在找一个基准数,再次进行相同的操作,直到最后只有一位时,排序就完成了。快排之所以较快,是因为其是基于二分法,它的交换是跳跃式的。下面是基本的快排的代码:对于快速排序,它还可以继续进行优化,在基准数的选定上,我们可以选取中间的数进行排序,这样可以缩短一些时间。代码如下:...

2020-01-19 16:39:28 287

原创 c语言的栈和队列

栈是一种先进后出的数据结构。它被限定为只能在一端进行插入和删除操作。它是一种运算受限的线性表,它的能进行插入和删除的一端被称为栈顶,另一端被称为栈底。向一个栈插入新元素又称进栈,入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈的实现很简单,只需要一个一维数组和一个指向栈顶的变量top即可,...

2019-12-29 17:10:44 293

原创 链表的创建逆置及增删改查

链表是一种常见的数据结构。它是一种动态的进行存储分配的一种结构。链表各元素在内存中的地址可以是不连续的。链表中的每一个结点中应包括一个指针变量,用它存放下一个结点的地址。链表的创建:建立链表是指在程序执行过程中从无到有的建立起一个链表,即一个一个的开辟结点和输入各结点数据,并建立起前后相链的关系。链表的逆置:链表的增加:链表的删除:链表的更改:链表的查找:...

2019-12-22 18:17:02 175

原创 C语言中的指针

C语言中指针是代表的是内存中的一个地址,内存是用变量存储的地方,指针就是指向该变量地址的一个箭头,C语言中将地址形象化的称为指针,意思就是通过它能找到以他为地址的内存单元。定义指针变量的一般形式为: 类型名 *指针变量名在定义变量时必须指定基类型,也就是类型名。利用指针可以解决很多问题。在函数中由于是值传递,所以实参的值不会改变,而return语句只能返回一个值,此时我们就可以利用...

2019-12-15 18:33:35 358

原创 C语言中利用函数实现模块化程序设计

在C语言中,由于C语言的函数库不太强大,如果把所有的程序代写在一个主函数中,会使主函数变得很长,不容易理解和发现错误,因此我们可以用“组装”的方法来使我们的代码变得更整洁美观,这就是模块化程序设计。我们可以事先定义好一些函数,然后在主函数中可以用一个简洁的函数名来实现各种我们所需要的功能。如上面这个源代码,它利用两个函数来实现输出一串星号和输出一行字符:自定义的函数我们在定义时不能在一个函...

2019-12-08 18:50:17 2549

空空如也

空空如也

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

TA关注的人

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