数据结构与算法
文章平均质量分 88
kwenZh
朝闻道夕死可矣
展开
-
数据结构与算法-单链表篇
在数据结构中,链表可能是程序员会建立的最简单的数据结构。也是非常基础的一种数据结构,往往简单的东西越需要扎实,大多数的情况是眼高手低觉得很简单差不多,一写代码就出错,一运行就崩溃,完成链表这一数据结构主要在于对指针的使用。 链表是一种线性的数据结构,相比静态申请数组空间必须要给定长度,链表更加长灵活,如果数据的个数会随着时间变化而增加或者减少,链表是一种很好的存储...原创 2018-04-18 18:52:08 · 11635 阅读 · 0 评论 -
算法笔记-快速幂
快速幂就是快速的求底数的整数次方,比起朴素的方法O(n)的时间复杂度,其时间复杂度是O(log2n)。这是很不错的一个效率提升。通常要求一个数X的Y次方,记做X^Y,朴素的计算方法是把X乘Y次得到这个结果。而快速幂计算的过程是,对于指数Y进行奇偶性的判断。为了方便解释,记做:ans = base ^exp如果exp为奇数,那么ans = ans * base;如果exp...原创 2018-07-18 16:37:16 · 338 阅读 · 0 评论 -
数据结构与算法-递归(回溯法)
递归:程序调用自身的编程技巧。具体点说一个函数自己调用自己就是递归。编程中如果要用到递归去解决一个问题,首先要考虑的是递归的停止条件是什么?如果忽略掉这一点,你的程序就会一直递归递归,直到栈溢出,弹出来一个框框。递归何时停止,这是我们在写一个函数之前首要考虑的地方。可以把递归看成一个栈,每一次的递归就好像是压栈,弹出栈的时候就好像是遇到了递归的停止条件,返回条件。返回了上一级的调用函数。二...原创 2018-06-26 13:08:38 · 731 阅读 · 3 评论 -
最短路径Dijkstra和Floy算法
最短路径问题一般分为两种情况,单源最短路径(即从一个点出发到其余各点的最短路径问题)和每对顶点之间的最短路径问题。Dijkstra和Floy算法相比之下我更喜欢Floy算法,该算法容易理解,思路简洁。两种算法解决最短路径都是基于贪心的算法,从局部出发一点点扩展。以一个简单的例子来说,如下图,图中有6点,可以看做是6个城市,求各城市之间的最短路径问题。这里图中只有6个顶点,你可能仅凭眼看就能...原创 2018-06-30 18:57:22 · 581 阅读 · 0 评论 -
数据结构与算法-最小生成树Prim和Kruskal
最小生成树的算法这两种算法都是本着贪心的思想从局部出发,一步步扩展,完成整体部分。一个网络包含了一系列由链路相连的结点(在离散数学里面,也叫做图,结点就叫做顶点,链路叫做边)。与树不同,网络中并没有根节点。链路可以是无向(可以从任意一个方向通过它)的, 从你家到我家和从我家到你家就都走一条路,距离也是一样的,或者是有向(只能从一个方向通过它),有向图可以想象,单向高速车道,从西安到宝鸡和从...原创 2018-06-30 17:07:50 · 533 阅读 · 0 评论 -
算法笔记-对于ArrayList的理解 动态数组
ArrayList的本质还是数组,是Java一种可变长数组的数据结构,概括的说底层实现机制,是扩容和拷贝元素。ArrayList实现了List等好多个接口 ,主要看一下List接口。public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Clon...原创 2018-06-08 10:28:06 · 473 阅读 · 0 评论 -
字符串模式匹配BF、KMP和Boyer-Moore,Sunday算法
这几天总结了一下总结了一下字符串匹配的几种算法,BF、KMP和Boyer-Moore,Sunday算法,觉得就KMP算法难于理解,其余三种都非常容易理解掌握。 串匹配:给一个目标串(源串)和模式串(子串),在目标串中找出模式串第一次出现的位置,或者目标串中找不到这样一个模式串。暴力匹配法(BF):就是挨个比较,产生失配了就把模式串往后移动一个位置接着和目标串比较。直到模式串所有字符匹...原创 2018-05-06 15:05:55 · 620 阅读 · 0 评论 -
数据结构与算法-哈希表链地址法完成
散列表是实现字典操作的一种有效的数据结构,尽管在最坏情况下查找一个元素时间和链表相同。但实际应用中,散列表的性能是极好的,合理情况下,平均时间复杂度为O(1)。typedef struct Datatype { int key; USER_TYPE value;}Datatype;typedef struct HashTable { int times;...原创 2018-05-04 20:03:30 · 12225 阅读 · 1 评论 -
数据结构与算法-排序算法总
所谓排序就是将待排序文件中的记录,按关键字非递增或者非递减次序排列起来。即将一组“无序”的记录序列调整成为“有序”的记录序列。记录是进行排序的基本单位,它由若干个数据项组成。其中有一项可用来唯一标识一条记录,称为关键字项,该数据项的值称为关键字key,关键字的选取根据实际问题的需求而定。 排序的稳定性:通俗的说就是排序结束后,相同关键字的相对位置和排序前是一样的没有...原创 2018-04-25 14:26:17 · 358 阅读 · 0 评论 -
数据结构与算法-栈和队列的数组实现、具有最小元素的栈
栈(stack)是一种以后进先出为顺序对对象进行添加或者删除的数据结构,是一种只允许在一端进行插入删除的线性表。可以把栈想象成桌子上的一堆书,可以在这堆书的顶部放上一本书就是入栈,或者把这堆书最顶部的一本书拿走就是出栈,但是你不能直接抽出来书堆中间的书,只能对书堆顶部一本书操作。 1、栈的数组实现 栈的数组实现相比链表容易多了,起码没有指向指...原创 2018-04-23 18:32:52 · 627 阅读 · 0 评论 -
数据结构与算法-稀疏矩阵(三元表的实现)
稀疏矩阵,矩阵中非零元素的个数远小于矩阵元素总数,且非零元素的分布没有规律,可以称该矩阵为稀疏矩阵。如果还用一个row*col的矩阵去表示这些信息,浪费空间,可以对矩阵换一种存储结构,只需要记录矩阵中非零元素的位置和值。也就是通过三元表来完成一个稀疏矩阵的表示,此外还有通过链表,这里讲一下三元表的稀疏矩阵以及稀疏矩阵的打印,转置。 三元表的结构就是下图,...原创 2018-05-02 15:40:40 · 7041 阅读 · 0 评论 -
数据结构与算法-二维数组与指针、任意行列的二维数组
数组是最常用到的存储结构,数组是在内存上一段连续的存储空间,数组名的本质就是数组的首地址,所以在函数传参时函数形参可以是一个指针,实参传递时直接传递数组名即可。像这样。void showArray_1D(int *array, int array_length);int a[] = {5,2,3,58};showArray_1D(a, sizeof(a) / sizeof...原创 2018-05-02 17:15:31 · 591 阅读 · 0 评论