
数据结构与算法
文章平均质量分 80
CodingGeek
屌丝一枚,喜编程,对C/C++,数据结构与算法,操作系统,平台移植,QT,设计模式,开发框架等一切有研究价值的东西感兴趣!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Perl统计英文单词(没有考虑缩写和连写词)
英文中单词之间直接有空格,而且Perl直接能匹配上原创 2014-11-05 19:29:18 · 1508 阅读 · 0 评论 -
插入排序增强版
我们指定,排序算法按照其稳定性来说,分为非稳定性排序与稳定性排序算法。判断稳定性与非稳定性算法的依据一般在是否为相邻元素之间的数据交换,不然一般为非稳定排序。比如快速排序,Shell排序等都不是稳定排序,而像冒泡排序,插入排序,合并排序等都是稳定排序。C语言库函数中的qsort函数是基于快速排序的,因此排序之后,未参加排序的数据之间的顺序可能被打乱。又是我们又需要在某一类场景下利用到稳定排序算法。原创 2015-05-31 09:17:57 · 598 阅读 · 0 评论 -
分治法在算法设计中的运用
在算法设计中,常见的设计思想有分治法,分支定界,回溯,动态规划等等。其中分治法是算法设计中最为重要的思想之一。分治法思想的本质就是分而治之,将解决一个问题的解空间一分为二,每个子问题的解空间步骤与原问题解法上类似,分治法很多时候用递归这种方式来实现。算法设计相关教材一般将归并排序作为分治法的典型应用,归并排序思想是将一个待排序的序列一分为二,递归地对每个子序列排序,这样一直分解下去,直到不能分解为原创 2015-07-09 22:13:28 · 2035 阅读 · 0 评论 -
AVL树原理思想及其实现
AVL树,一种平衡搜索二叉树,是BST(Binary Search Tree)二叉查找树的一种,实际上是在BST搜索树上增加了平衡条件,所谓的平衡条件指的是树中的每个结点的左孩子与右孩子的高度之差不大于1。既然是一种BST树,那么它肯定满足BST的一般性质。在计算机科学领域,二叉搜索树(BST),有时也称作有序的或者排序好的二叉树,是一种特殊类型的容器。它允许快速的查找,增加,删除结点,可以被用作原创 2015-07-05 17:15:50 · 819 阅读 · 1 评论 -
堆排序算法原理及实现
堆排序是排序中一种比较重要的算法,和快速排序一样,其复杂度也是O(nlogn);同时也是一种原地排序算法:在任何时候,数组中只有常数个元素存储在输入数组以外。堆这种数据结构是处理海量数据比较常见的结构,海量数据的TOP K问题一般可以通过分治法+hash+堆这种数据结构解决。值得注意的是,这里将的“堆”准确的说是二叉堆,逻辑上是一棵类似完全二叉树的数据结构。原创 2015-06-09 22:20:28 · 8119 阅读 · 0 评论 -
链表操作常见技巧浅析
链表操作是程序设计中最常见的一类操作。在我们项目或面试中经常会用到,我们可以大致总结下链表操作的常见技巧。其实也没有什么难点,主要是操作列表时,注意异常边界值的考虑。一般在修改链表时,会用到辅助链表指针,其目的在我看来主要有2个作用:一是将当前结点保存起来,好让此时结点的指针指向下一结点(这里可以类似看做一个游标,向前或向后的结点移动。二是利用辅助链表指针的位置来实现特定的目的)。我们主要看到这里原创 2014-12-29 22:47:25 · 1005 阅读 · 0 评论 -
字符串中删除特定的字符
1. 在字符串中删除特定的字符(字符串)。输入两个字符串,从第一字符串中删除第二个字符串中所有字符例如,输入"They are students." 和 "aeiou"。则删除之后的第一个字符串变成 "Thy r stdnts."#include #include #include //trimString函数//inputString:输入字符串//pattern:待删原创 2015-05-13 22:28:57 · 1931 阅读 · 0 评论 -
单链表归并排序
数组排序常见的有十几种排序算法,然而对于单链表来说,链表缺乏随机访问特点,导致一些排序算法在时间和空间复杂度上都比较负责,一般的冒泡排序与插入排序,其时间复杂度都是O(N^2)。链表中最优的排序算法应该为归并排序,归并排序是分治法的典型应用,主要思想是将一个大问题划分为N(一般取2)个等价的子问题,通过对子问题的解答来达到对原有问题的解决。下面对链表的归并排序用代码实现。归并排序思想可以参考数组归原创 2015-05-04 21:56:40 · 4863 阅读 · 0 评论 -
Redis双向链表浅析
Redis源码Adlist中实现了一个双向链表,该链表在设计数据结构及其操作上有许多不同的技巧!原创 2015-04-16 22:48:01 · 780 阅读 · 0 评论 -
线性表之链式表示
线性表链式表示方法线性表的链式存储特点是用一组任意的存储单元存储线性表的数据元素(这组存取单元很可能在物理上不是连续的)。因此为了表示每个数据元素,出了存储其本身的信息之外,还的存储一个指示其后继的信息。这两部分信息组成数据元素的存储映像,称为结点。包括了一个数据域和一个指针域(为什么可以包括自己类型的指针呢?因为指针在32位CPU上表示4字节大小,大小固定)。其原理及其实现都是比原创 2014-12-23 22:43:38 · 616 阅读 · 0 评论 -
几种常见STL容器类操作
STL容器类主要分为两种,一种是序列容器类,包括vector,list,deque等。另外一种是关联式容器,主要map,set。在实际使用过程中,主要按照数据存储的场景来选择容器。在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则: 1) 如果你需要高效的随机存取,而不在乎插入和删除的效率,使用vector 2) 如果你需要大量的插入和删除,原创 2015-04-05 11:54:07 · 745 阅读 · 0 评论 -
几个经典算法研究
最近研究几个经典算法,比如二分查找,大数相加等。加强一下编码思路训练。原创 2015-01-05 22:38:53 · 724 阅读 · 1 评论 -
数据结构之线性表(顺序表示)
在学习完大量的计算机原理知识之后,个人发现需要在二方面都得具备:一方面是宏观知识,主要是对整个计算机系统的理解和软件设计相关的基础知识。另一方面则是微观知识,具体表现为某个或某一类算法的原理及实现思想。如果只是谈及第一部分而没有具体做过的话(实现的话),感觉也只是纸上谈兵,而且计算机理论基础,包括操作系统内核代码实现则需要有扎实的算法基础和数据结构知识。缺少这个的话,无法向着高级程序员迈进。这两年原创 2014-12-22 20:58:40 · 705 阅读 · 0 评论 -
算法导论------快速排序
当我们学习研究完各种开发语言,操作系统,软件设计等方面软件知识之后,发现程序设计的本质还是在算法设计上。算法设计的好坏直接影响程序性能。于是,最近学习绕了一圈之后又重新拾掇起程序的核心部分------------算法(程序=数据结构+算法),掌握常见的数据结构与算法再去研读优秀的开源项目(比如linux内核)时会做到游刃有余。算法中最基础的就是查找和排序。当然这里谈算法是与数据结构紧密相连的。数据原创 2014-08-11 22:53:43 · 764 阅读 · 0 评论 -
POJ数字滑雪问题
#include #define MAX 100int skiMap[MAX][MAX]; //地图存储int skiLength[MAX][MAX];//滑行最长距离存储int direction[4][2]= {{1,0},{0,1},{-1,0},{0,-1}}; //四个方向的坐标变化 //判断当前要访问节点(x,y)是否在地图内bool isInSk原创 2015-03-07 18:41:48 · 1501 阅读 · 0 评论 -
Hash函数经典用法
撰写这篇文章之前,先牢骚几句。程序员除了数据结构与算法,什么也不属于自己---记得哪个NB人物曾经说过这样的话。的确,程序员水平高低如何,很大程度上取决于基本功是否扎实。高级程序员与普通码农的区别在我看来就是对这些基础知识是否做到了运用自如。许多程序员开发程序也是简单地调用已有系统库,或者第三方组件,写写简单的hello world或者if...else之类的程序,这样下去其个人竞争优势逐渐散失,原创 2015-05-28 22:11:45 · 14328 阅读 · 1 评论