![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 88
zhisheng_blog
这个作者很懒,什么都没留下…
展开
-
详解前缀、中缀、后缀表达式
关键字:概念, 前缀表达式, 前缀记法, 中缀表达式, 中缀记法, 波兰式, 后缀表达式, 后缀记法, 逆波兰式它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。举例:(3 + 4) × 5 - 6 就是中缀表达式- × + 3 4 5 6 前缀表转载 2016-09-24 15:39:27 · 1474 阅读 · 0 评论 -
【排序】时间复杂度为O(N^2)的排序——冒泡、选择和插入排序
相关阅读:Java常用排序算法/程序员必须掌握的8大排序算法排序冒泡排序冒泡排序的时间复杂度为 O(n^2)冒泡排序的具体步骤请看下图:这里在写一个简单的冒泡排序题目吧题目:对于一个int数组,请编写一个冒泡排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1, 2, 3, 5, 2, 3], 6返回值: [1, 2, 2, 3, 3, 5原创 2017-01-22 20:12:45 · 2520 阅读 · 7 评论 -
《剑指offer》栈和队列——用两个栈实现一个队列
题目 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路 将一个栈作为压入栈 ( stackPush ),在压入数据时只往该栈压入,另外一个栈作为弹出栈,在弹出数据时只从这个栈弹出 ( stackPop )。 因为栈的特点是:先进后出,所以先将所有数据逐一压入 stackPush 栈中,然后再将所有数据从栈 stackPush 顶到栈底逐一压原创 2017-03-17 21:02:07 · 851 阅读 · 5 评论 -
《剑指Offer》递归和循环——跳台阶
题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路 首先我们考虑最简单的情况。如果只有1个台阶,那么显然只有一种跳法;如果是2级台阶,那么有2种跳法。 对于一个有n级台阶的楼梯来说,我们设跳法为 f(n) ,假如我们先跳1个台阶,则剩下有 n-1 个台阶,跳法为 f(n-1) 次, 假如我们先跳2个台阶,则剩下 n-2 阶,跳法原创 2017-03-17 22:26:10 · 1139 阅读 · 4 评论 -
一道值得思考的数据结构题目(入栈与出栈序列)
就业指导课上做的一道数据结构中有关栈的题目,当时一开始自己思考不全面,错选了。一个栈的入栈序列为1,2,3,…,n ,其出栈序列是 p 1 ,p 2 ,p 3 ,…p n 。若p 2 = 3,则 p 3 可能取值的个数是()A:n -3B:n - 2C:n - 1D:无法确定答案:C ( n - 1)个看了别人的一些解析,觉得不够完善,下面给出自己的见解。首先,栈的先进后出原则大家应该是知道的。原创 2017-03-08 19:20:53 · 3465 阅读 · 3 评论 -
《剑指Offer》递归和循环——矩形覆盖
题目: 我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,总共有多少种方法?代码:RectCover.javapublic class RectCover{ public int RectCover(int target) { if (target <= 0) { re原创 2017-03-20 23:09:22 · 956 阅读 · 3 评论 -
《剑指Offer》替换空格(将字符串中的空格替换为%20)
题目: 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为 We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy。思路:这种替换问题要考虑是否会覆盖原字符串,若是在源字符串上直接替换。看到这个问题我觉得很多人都会想到直接从头开始替换,即遇到空格就将其替换为%20,每次都要将空格后的字符后移两个字节。这种解法的时间复杂度为O(n^2)!!!另外原创 2017-03-12 11:10:01 · 3122 阅读 · 6 评论 -
《剑指Offer》递归和循环——斐波那契数列
题目: 大家都知道斐波那契数列(0、1、1、2、3、5、8、13、21、……), 现在要求输入一个整数n,请你输出斐波那契数列的第n项。主要算法:public int Fibonacci(int n){ int a=1,b=1,c=0; //对n进行判断 if (n <= 0){ return 0;原创 2017-03-12 23:03:46 · 622 阅读 · 0 评论 -
《剑指Offer》位运算——求二进制数中1的个数
题目: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1原创 2017-03-22 22:48:01 · 1311 阅读 · 12 评论 -
《剑指offer》数组——二维数组中查找
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路: 利用二维数组由上到下,由左到右递增的规律, 那么选取右上角或者左下角的元素 arr[row][col] 与 target 进行比较 这里就选右上角元素,当 target < arr[0][c原创 2017-03-13 20:24:13 · 547 阅读 · 0 评论 -
【字符串】判断两字符串是否互为旋转词?
相关阅读:字符串逆序问题的解决方法题目:如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A=”12345”,A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。对于两个字符串A和B,请判断A和B是否互为旋转词。给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。测试样例: “原创 2017-01-21 18:55:00 · 1372 阅读 · 9 评论 -
【字符串】字符串逆序
字符串题目一:如果一个字符串 str ,把字符串 str 前面的任意部分挪到后面去形成的字符串叫做 str 的旋转词。比如 str = “ 1234 ” , 那么 str 的旋转词有 “ 1234 ” , “ 2341 ” , “ 3412 ” , “ 4123 ” 。给定两个字符串 a 和 b ,请判断 a 和 b 是否互为旋转词?举例:a = ” cdab ” , b = ” abcd ” 。返原创 2017-01-21 13:29:37 · 2603 阅读 · 0 评论 -
【二叉树】二叉树打印
有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。 给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。举个栗子:如下就是一个二叉树详细步骤: 1.初始化时,last=1,把1放入队列; 2.将1出队,把1的子孩子2,3放入队列,更新nlast=3; 3.nl原创 2017-01-20 10:30:29 · 1128 阅读 · 0 评论 -
中缀表达式转换成前缀和后缀表达式这类题目的超实用解题技巧
看到了标题如果还不了解的这几个概念的请先看看博客:详解前缀、中缀、后缀表达式先给几个中缀表达式转换成后缀表达式题目做做吧,最后我们在总结超实用的技巧!!1. 表达式“X=A+B*(C–D)/E”的后缀表示形式可以为A. XAB+CDE/-*=B. XA+BC-DE/*=C. XABCD-*E/+=D. XABCDE+*/=先把答案说出来吧,不过你可以自己先好好的想想可以怎么做才能更快的把答案选出来呢原创 2016-09-30 15:51:13 · 9244 阅读 · 4 评论 -
队列可以用数组和链表实现
队列是先入先出额数据结构,它的实现可以用数组,也可以用链表。1. 数组实现队列用数组实现链表时,需要预先分配数组的大小,用front和rear下标分别表示队头元素下标和队尾元素下标,插入一个元素时,使队尾的下标rear加1,删除一个元素时,front下标加1,判断是否为空的队列只要判断front和rear是否相等。队列的插入操作可表示为 代码实现:# include <stdio.h> # i原创 2016-08-25 09:23:28 · 1981 阅读 · 0 评论 -
在154个元素组成有序表进行二分法查找,可能的比较次数为()
在154个元素组成有序表进行二分法查找,可能的比较次数为() A:10 B:8 C:4 D:2答案:BCD别出新意的解题思路: 折半查找过程可用二叉树来描述,把有序表中间位置上的结点作为树的根结点,左子表和右子表分别对应树的左子树和右子树。折半查找的过程就是走一条从根节点到被查结点的一条路径,比较的次数就是该路径中结点的个数,即,该结点在树中的层数。 所以该题可以转换为求有154个结点的原创 2016-08-26 10:40:22 · 6085 阅读 · 0 评论 -
以下数据结构中,()是非线性数据结构
以下数据结构中,()是非线性数据结构A:树(二叉树) B:字符串 C:队列 D:栈 E:线性表 F:二维数组 G:多维数组数据的逻辑结构分为线性结构和非线性结构。 常用的线性结构有:线性表,栈,队列,双队列,数组,串。 常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图。原创 2016-08-25 09:07:40 · 54146 阅读 · 0 评论 -
循环队列的相关条件和公式
循环队列的相关条件和公式: 队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度 1.队空条件:rear==front 2.队满条件:(rear+1) %QueueSIze==front 3.计算队列长度:(rear-front+QueueSize)%QueueSize 4.入队:(rear+1)%QueueSize 5.出队:(front+1)%QueueS原创 2016-08-25 08:38:00 · 1206 阅读 · 0 评论 -
怎么判断一个序列是不是堆?
已知一个序列,比如{100,6070,50,32,65},怎么判断是不是堆?答案:把这个序列看成数组型的二叉树,如果根结点是i,左子树是2*i,右子树是2*i+1。堆分为最大堆与最小堆。最大堆中所有父节点都比左子树、右子树大,比如已知序列,画成堆就是: 所以已知序列是个最大堆。最小堆中所有父节点都比左子树、右子树小,比如{32,50,60,70原创 2016-08-17 09:19:58 · 5674 阅读 · 0 评论 -
递归-算法题解1
在牛客网刷题,打算记录自己平常所做的题,以加深印象。同时记录自己假期的刷题的点滴。选B。递归算法是一种直接或者间接地调用自身算法的过程。在计算机 编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。递归算法解决问题的特点:(1) 递归就是在过程或函数里调用自身。原创 2016-07-26 20:54:36 · 1021 阅读 · 0 评论 -
递归_算法题解2
选择B:递归工作栈里面包括返回地址、本层的局部变量和递归调用的形参代换用实参,所以正常情况下,无论递归过程有没有使用局部变量,转换为非递归过程都需要用栈来模拟这个递归调用过程 。当然,有一些特殊递归不用栈就可以直接转换,比如尾递归、常系数递推等,无论是否有局部变量直接排除AD原创 2016-07-27 10:56:36 · 885 阅读 · 0 评论 -
高级算法-题解1
在AOE网中,从源点到汇点的所有路径中,具有最大路径长度的路径成为关键路径。在AOE网中,可以有不止一条的关键路径。旅行商问题(Traveling Saleman Problem,TSP)什么是旅行商问题旅行商问题(Traveling Saleman Problem,TSP)是VRP的特例,由于Gaery [1]已证明TS原创 2016-08-03 09:58:13 · 1375 阅读 · 0 评论 -
【二叉树】二叉树序列化和反序列化
二叉树序列化和反序列化1、二叉树 ——> 字符串(序列化)2、字符串 ——> 二叉树(反序列化)序列化的方式1、根据先序遍历序列化2、 根据中序遍历序列化3、根据后序遍历序列化4、按层序列化题目:给定一棵二叉树的头节点head,并已知二叉树节点值的类型为32位整型。请设计一种二叉树序列化和反序列化的方案,并用代码实现。思路:例:先序遍历对二叉树进行序列化假设序列化结果为str, 初始时str为空字原创 2017-01-20 12:22:01 · 1225 阅读 · 0 评论 -
《剑指Offer》查找和排序——旋转数组中的最小数字
题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:旋转之后的数组实际上可以划分成两个有序的子数组:前面子数组的大小都大于后面子数组中的元素 注原创 2017-03-23 19:41:27 · 1027 阅读 · 0 评论