随笔分类 -  数据结构与算法

摘要:在做关于数组的算法题之前,一定要先对数组有一定的了解: C#中的数组一旦被创建,大小就固定了,且不支持动态数组。数组的索引是从0开始的,也就是说,一个长度为n的数组,索引为0~(n-1)。 数组实例是从System.Array继承的对象,数组是引用类型,有数据的引用及数据对象本身,引用在栈或堆上,且 阅读全文
posted @ 2016-09-28 16:22 Ribbon 阅读(3632) 评论(1) 推荐(1) 编辑
摘要:队列有时候,我们会遇到一些数字密码游戏,比如,给出一串数字: 4,6,8,3,5,2,2,6,0,解密规则是这样的,首先将第1个数删除,紧接着将第2个数字放到这串数的末尾,再将第3个数删除并将第4个数放到这串数的末尾,再将第5个数删除……如此往复,直到最后一个数也删除。按照刚才删除的顺序,将这些删除... 阅读全文
posted @ 2015-09-11 11:56 Ribbon 阅读(1094) 评论(0) 推荐(0) 编辑
摘要:生活中无处不在都是被排序过的东西,电子邮箱中的邮件按时间来排序,考完试后出了成绩也会进行一定的排序。在面试中,排序算法也是层出不穷,从简单的冒泡排序问到快速排序,再问到堆排序,希尔排序……现在,让我们开启排序之旅吧~说到排序,给出了一定的数据,我们最容易想到的,其实并不是冒泡,也并不是快速等排序法,... 阅读全文
posted @ 2015-09-10 15:43 Ribbon 阅读(854) 评论(0) 推荐(0) 编辑
摘要:1. 执行循环操作求1~N的和要完成这个计算,可以通过以下循环步骤求出: a. 将求和变量Sum的初始值设为0. b. 将和Sum为计算结果, Value为加数 c. Value在N以下时,重复执行4~5的操作 d. 计算Sum+Value的值并将值存入Sum中 e. 每次Value值加1... 阅读全文
posted @ 2015-05-28 16:44 Ribbon 阅读(405) 评论(0) 推荐(0) 编辑
摘要:什么是数据结构?大量数据的有效管理机制。描述计算机算法的时候使用的数据结构有很多种: 数组:连续排列数据的数据结构,数据以线性无间隙地排列 链表:数据按照顺序排列的数据结构,链表可以管理线性排列的数据,也可以远距离存放 栈:类似于桌子上堆书一样来管理数据的数据结构,栈是一种与数据输入顺序相反,... 阅读全文
posted @ 2015-05-26 10:54 Ribbon 阅读(780) 评论(0) 推荐(0) 编辑
摘要:算法是解决问题并获得结果的过程。在这个处理过程中,问题以数据的形式输入,结果同样以数据的形式输出,在算法的处理过程中,也需要各种临时的数据。数据是什么?数据是多种不同信息的表现。以料理中的食谱为例,下面的材料即为算法——食谱的数据: 猪肉120g, 洋葱1/2个, 胡萝卜1/2个, 土豆2个, 糖... 阅读全文
posted @ 2015-05-25 14:38 Ribbon 阅读(458) 评论(0) 推荐(0) 编辑
摘要:什么是算法?算法是利用计算机解决问题的处理步骤,简而言之,算法就是解决问题的步骤。算法不仅仅用于计算机的数据处理,现实世界中的各种问题也需要结合算法的概念来解决,其中,具有代表性的就是烹饪中用到的食谱,食谱是各种美味料理的制作方法,需要用一定的步骤表示出来。算法是古老智慧的结晶,是程序的范本,学习算... 阅读全文
posted @ 2015-05-21 12:32 Ribbon 阅读(39814) 评论(3) 推荐(1) 编辑
摘要:紧接着上一篇微软编程面试100题,这次想解决的是查找最小的K个元素,题目是:输入n 个整数,输出其中最小的k 个。例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。看到题目的时候我第一反应,这题很简单,使用任何方式的排序将数列按顺序存储,之后遍历需要的k个元素即可,于是自己动手很容易就完成了,但是后来在网络上发现很多人对这题的解决方式是用小根堆(MinHeap)或者大根堆(MaxHeap),这才意识到,其实出题人是醉翁之意不在酒,在乎复杂度的考虑也。先写用排序的方式完成题目的方式吧,不仅简单,不需要费太多脑子,重要的是,正好趁这时候复习下排序,这里用 阅读全文
posted @ 2014-03-29 13:57 Ribbon 阅读(1554) 评论(4) 推荐(2) 编辑
摘要:此题为July在CSDN发布的微软编程面试100题中的第一题,觉得蛮有趣的,今天也拿过来玩玩,July的代码用的是C++实现,可能因为有指针的原因吧,感觉看起来相对比较容易理解整个的实现过程,而我,试着用C#完成这样的功能。完整的题目如下:把二元查找树转变成排序的双向链表,要求不能创建任何新的结点,只调整指针的指向。 10 / \6 14/ \ / \4 8 12 16转换成双链表 4=6=8=10=12=14=16动手编码之前,先回顾下二叉查找树的特点:任意节点的左子树都要小于当前节点,右子树都要大于当前节点。查询某个值,需要的时间复杂度为O(lgN)。现在要求将其由树状结构改造... 阅读全文
posted @ 2014-03-27 12:59 Ribbon 阅读(973) 评论(1) 推荐(1) 编辑
摘要:树是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:1. 有且只有一个特定的称为根(root)的结点;2. 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2.....Tm,其中每一个集合本身又是一棵树,并且称为根的子树:树的定义其实就是递归方法,即在树的定义中还用到了树的概念。需要注意的是:1. n>0时根节点是唯一的,不可能存在多个根节点。2. m>0时,子树的个数没有限制,但它们一定是互不相交的。树的结点包含一个数据元素及若干指向其子树的分支。结点拥有的子树数成为结点的度。度为0的结点成为叶节点或终端节点;度不为0的结点成 阅读全文
posted @ 2014-03-22 17:00 Ribbon 阅读(313) 评论(0) 推荐(0) 编辑
摘要:作为线性表的两种物理结构之一,顺序存储指的是用一段地址连续的存储单元依次存储线性表的数据元素,于是,基本思想便是由数组来承担盛放这些元素的重任。对于线性表的操作,比较常见的则是获取线性表的长度GetLength(),向线性表指定位置插入一个元素Insert(),向线性表追加一个元素Add(),判断线性表是否为空IsEmpty(),获取指定位置的元素GetElement(),删除指定位置的元素Delete(),在线性表中查找与给定值相等的元素并提示该元素所在的位置或者查找失败LocateElement()及反转线性表Reverse(),如下代码定义的方法便是我们需要花时间思考如何实现的:int 阅读全文
posted @ 2013-03-04 17:53 Ribbon 阅读(2128) 评论(3) 推荐(1) 编辑