随笔分类 - 数据结构
摘要:一、前言 缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理完,则A要延迟发送。为了保证进程A减少等待时间,可以在A和B之间采用一个缓冲区,A每次将数据存放在缓冲区中,B每次
阅读全文
摘要:1、申请方式 (1)栈(stack):由系统自动分配。 (2)堆(heap):需程序员自己申请(C:调用malloc,realloc,calloc申请free来释放),并指明大小,并由程序员进行释放。容易产生内存泄漏。 2、申请大小的限制 (1)栈:在windows下栈是向低地址扩展的数据结构,是一
阅读全文
摘要:我们知道,数组式计算机根据事先定义好的数组类型与长度自动为其分配一连续的存储单元,相同数组的位置和距离都是固定的,也就是说,任何一个数组元素的地址都可一个简单的公式计算出来,因此这种结构可以有效的对数组元素进行随机访问。但若对数组元素进行插入和删除操作,则会引起大量数据的移动,从而使简单的数据处理变
阅读全文
摘要:堆——神奇的优先队列(下) --转自啊哈磊【坐在马桶上看算法】算法12:堆——神奇的优先队列(下) 接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log i),所以插入所有元素的整体时间
阅读全文
摘要:堆——神奇的优先队列(上) --转自啊哈磊【坐在马桶上看算法】算法11:堆——神奇的优先队列(上) 堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。 有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。符合这
阅读全文
摘要:二叉树 --转自啊哈磊【坐在马桶上看算法】算法10:二叉树 二叉树是一种特殊的树。二叉树的特点是每个结点最多有两个儿子,左边的叫做左儿子,右边的叫做右儿子,或者说每个结点最多有两棵子树。更加严格的递归定义是:二叉树要么为空,要么由根结点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。 下面这
阅读全文
摘要:开启“树”之旅 --转自啊哈磊【坐在马桶上看算法】算法9:开启“树”之旅 我们先来看一个例子。 这是什么?是一个图?不对,确切的说这是一棵树。这哪里像树呢?不要着急我们来变换一下。 是不是很像一棵倒挂的树,也就是说它是树朝上, 而叶子朝下的。不像?哈哈,看完下面这幅图你就会觉得像啦。 你可能会问:树
阅读全文
摘要:Floyd最短路算法 转自啊哈磊【坐在马桶上看算法】算法6:只有五行的Floyd最短路算法 暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。 上图中有4个城市8条公路,公路上的数字表示这条公
阅读全文
摘要:栈——解密回文 转自啊哈磊【坐在马桶上看算法】算法5:解密回文——栈 上一节中我们学习了队列,它是一种先进先出的数据结构。还有一种是后进先出的数据结构它叫做栈。栈限定只能在一端进行插入和删除操作。比如说有一个小桶,小桶的直径只能放一个小球,我们现在向小桶内依次放入2号、1号、3号小球。假如你现在需要
阅读全文