数据结构与算法
文章平均质量分 72
数据结构与算法是衡量一个工程师的内功的必备知识,也是进BAT面试的必考知识。本专栏详细讲解常用的数据结构与算法,如排序,二叉树,链表,栈,队列等。
这个家伙很懒~
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
螺旋数组
要求:螺旋数组是指将给定的存储连续自然数的二维数组中的数字从最外层开始以顺时针形式输出如:二维数组为 {{1,2,3,4}, {5,6,7,8}, {9,10,11,12},{13,14,15,16}}则输出为: {{1,2,3,4}, {12,13,14,5}, {11,16,15,6}, {10,9,8,7}}先上代码,然后再来分原创 2016-03-11 15:57:49 · 17384 阅读 · 0 评论 -
打印二叉树和为某一值的路径
要求:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。二叉树的节点定义如下:struct BTNode{ int data; BTNode *leftChild; BTNode *rightChild;};思路:因为求路径是从根节点到叶子结点,所以我们可以考虑二叉树的先序遍历框架,如下所示:原创 2016-03-16 20:39:17 · 2508 阅读 · 0 评论 -
字符串的组合
要求:输入一个字符串,输出该字符串的所有组合。如:若字符串为:abc,则应输出:(空集),a、b、c、ab、ac、bc、abc.思路:考虑到数学中的排列组合知识,我们知道所谓组合即是在字符串中选取某些字符组合在一起,而在二进制中我们可以用0代表未选取某字符,1代表选取了某字符,这样自然可以想到用位运算来实现该过程。位运算结果为1则代表该位被选取。如000代表空集,001代表选取最后一个字符原创 2016-03-17 16:32:38 · 4187 阅读 · 0 评论 -
字符串的排列
要求:输入一个字符串,打印出该字符串中的字符的所有排列。如:输入字符串abc,则打印出abc,acb,bac,bca,cab,cba.思路:我们可以把一个字符串看成是两部分组成:第一部分为它的第一个字符,第二部分为余下的全部字符。求整个字符串的全排列我们可以看作是:首先求所有可能出现在第一个位置的字符,即把第一个字符和余下的每一个字符交换,第二部:固定第一个字符,求余下字符的全排列。这个时原创 2016-03-17 17:10:35 · 27164 阅读 · 0 评论 -
求连续子数组的最大和
要求:输入一个整型数组,数组里有正数也有负数,数组中一个或连续的多个整数构成一个子数组,求所有子数组的和的最大值。如:输入的数组为{1,-2,3,10,-4,5,1,-5},则输出结果为15.思路一:最直接的思路,可以用两层for循环解决,用来枚举出所有的子数组的和,但这种方式时间复杂度显然为O(n*n)思路二:因为只要求输出子数组和最大的值且连续,因此,很自然想到如果用cur原创 2016-03-09 16:02:46 · 1051 阅读 · 0 评论 -
【数据结构课程大作业】通信录管理系统
该软件为本人数据结构课程设计作业,采用win32控制台程序,基于链表的增删改查,可供计算机专业在校大学生作为数据结构课程设计参考每次使用需输入密码,初始密码为:123。可在软件主界面选择修改密码功能修改密码。具体功能如下:1输入信息。用来输入联系人的姓名与号码,当输入# #时表示结束。例如htq 1234567hq 123456789# #则htq 1234567原创 2016-03-10 14:45:30 · 35784 阅读 · 5 评论 -
字符串的n位左旋
要求:将主串的某一段(n位)翻转到主串的最后,如:abcdef以2位翻转则结果为:cdefab。要求时间复杂度为O(n),空间复杂度为O(1)思路一:可以重新定义一个与原串相同大小的字符数组result[len],用来存放最终结果,先将原串中的后len-n位复制到result[len]数组的前len-n位,然后将原串的前n位复制到result[len]中的后n位,但这种思路要求重新定义一个中间原创 2016-03-10 21:59:11 · 1234 阅读 · 0 评论 -
二叉树的递归与非递归
要求:给定一个二叉树序列,要求以递归与非递归的形式先序输出。递归的本质就是系统自动用系统工作栈来将参数入栈与出栈,所以递归化与非递归就是程序员自己来控制参数的入栈与出栈,可用循环加自定义栈来控制。代码如下:#include#includeusing namespace std;typedef struct BTNode{ char ch; struct BTNode *lc原创 2016-03-11 16:06:07 · 1389 阅读 · 0 评论 -
数据结构排序算法之堆排序
关于堆排序的相关知识非常复杂,不懂得可以参考任意一本数据结构教程,本博客只对堆排序框架及代码进行讲解。堆排序分三个大的步骤:建初堆,堆调整,堆排序(其中最核心的是堆调整)1建初堆:从数组中的最后一个非叶子节点开始,从下而上倒推(重复调用堆调整函数)2堆调整:堆调整的前提是已建好了一个堆,但是因为输出,导致需要重新调整堆3堆排序:从数组中所有元素开始,将堆顶元素与堆尾元素交换,然后数原创 2016-03-11 16:45:26 · 29650 阅读 · 0 评论 -
顺时针打印数组
要求:输入一个矩阵,按照从外向里以顺时针的顺序打印出每一个数字。如:如果输入的矩阵为:1 2 3 45 6 7 89 10 11 12 13 14 15 16 则输出结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路:根据题目描述,我们可以得到一些提示信息,即我们可以把该矩阵看作是一个原创 2016-03-16 18:35:18 · 29389 阅读 · 0 评论 -
【数据结构排序算法系列】数据结构八大排序算法
排序算法在计算机应用中随处可见,如Windows操作系统的文件管理中会自动对用户创建的文件按照一定的规则排序(这个规则用户可以自定义,默认按照文件名排序)因此熟练掌握各种排序算法是非常重要的,本博客将对数据结构中常见的八大排序算法进行详细的讲解。写在前面的话:首先要明白在学习同类型的排序算法时,一定要明白任何相同领域存在的东西一定是竞争之后的结果,所以对于相同类型的排序之所以能够存在多种被人熟原创 2016-03-25 22:36:40 · 100169 阅读 · 9 评论 -
【二叉树系列】二叉树课程大作业
本博客将以代码的形式详细讲解二叉树的所有算法,包括创建二叉树,二叉树的三种遍历方式,二叉树的各种属性算法,如:求高度,求叶子节点数,求节点数,以及二叉树最常见的应用哈夫曼树,代码如下:# include# include# include# include# define N 1# define M 2*N-1typedef char * HC[N+1];typedef stru原创 2016-03-26 16:21:35 · 69019 阅读 · 1 评论
分享