![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 68
C-learning
这个作者很懒,什么都没留下…
展开
-
二分查找的实现代码JAVA
> 1.前提: 有已排序数组A (假设已经做好)2.定义左边界L、 右边界R,确定搜索范围,循环执行二分查找(3、4两步)3.获取中间索引 M = Floor((L+R) 1/2)4.中间素索引的值 A[M] 与待搜索的值T进行比较①A[M]==T 表示找到,返回中间索引②A[M]>T, 中间值右侧的其它元素都大于T,无需比较,中间索引左边去找,M- 1设置为右边界,重新查找③A[M]R时原创 2023-02-25 11:38:46 · 1152 阅读 · 1 评论 -
带权路径长度
一、题目给定n个权值作为n个叶子结点,构造哈夫曼树, 求其带权路径长度。二、分析带权路径长度得计算方法有两种:第一是第一法,第二是等于各个非叶子结点的权值之和。这里我们用方法二计算,但是按照老方法,先构造一个哈夫曼树,之后再来计算会超时,所以这里我们不构造。可是对每次结果进行排序得话,再来选取最小得两个权值,函数会超时。所以我有点无能为力。然后在百度上搜索了一下,发现很多人都是使用优先队列做出来来的。所以我查阅了一下关于优先队列得知识。如下:在优先队列中,元素被赋予优先级。当访问元素时,具有最原创 2020-12-15 11:36:37 · 11159 阅读 · 0 评论 -
24点游戏(1)
一、题目读入表达式树的先序遍历字符串,这里的表达式树是来自24点游戏的真实场景,也就是对应四个数字(值在1到13之间)组成的表达式,问该表达式树能不能得到24?二、分析先序遍历创建二叉树。然后递归求其值。栈来处理左子树与右子树运算,不过这里要注意许多细节,像除数为0,还有这里是浮点型。同样是用栈计算值,但是这里有许多细节,像除数为0,还有这里是浮点型。之前就是没注意浮点型,结果错了很多次。三、算法实现(主要代码)typedef struct tree{ char data[原创 2020-12-15 11:34:16 · 2012 阅读 · 1 评论 -
表达式树的值
一、题目读入表达式树的先序遍历字符串,求其值。二、分析对于解决表达式树的值,可以用栈来实现,也可以直接递归计算。方法一:可以使用栈来计算。方法二:直接用左子树与右子树运算。三、算法实现(主要代码)方法一:栈typedef struct tree{ char data[5]; struct tree*ld,*rd;}*Tree;void sum(Tree T){ int y,f,d; if(T) { sum(T->ld);原创 2020-12-15 11:31:16 · 1535 阅读 · 0 评论 -
表达式树的创建与输出
一、题目编一个程序,读入先序遍历字符串,根据此字符串建立一棵二叉树(以指针方式存储),输出一行,内容是该表达式树的全括号表达式,二、分析先先序创建二叉树,然后根据先序遍历求格式控制输出即可。输出左括号,然后输出左子树,根,右子树,输出右括号。仔细观察要求要输出的,然后根据遍历算法设计出,相应的输出格式算法。树——遍历。极为重要,也是基础。三、算法实现(主要代码)typedef struct tree{ char data[5]; struct tree*ld,*rd;原创 2020-12-14 16:30:10 · 2159 阅读 · 0 评论 -
二叉树的创建和文本显示
一、题目编一个程序,读入先序遍历字符串,根据此字符串建立一棵二叉树(以指针方式存储)。二、分析首先根据先序遍历,用链表的存储方式,创建一棵二叉链表数。然后控制格式进行输出即可。其实题目中的输出格式,便是二叉树根据“右”、“根”、“左”这样的次序,然后空格数就是深度乘以4。细观察输出的格式,,右、根、左。然后找到相应的解决措施。二叉树的大部分算法都基于遍历的积除上。三、算法实现(主要代码)typedef struct tree{ char data[5]; struct原创 2020-12-14 16:27:47 · 1572 阅读 · 1 评论 -
中缀表达式转后缀表达式
一、题目输入一个中缀表达式,编程输出其后缀表达式,要求输出的后缀表达式的运算次序与输入的中缀表达式的运算次序相一致二、分析中缀表达式转后缀表达式的方法:1.遇到操作数:直接输出(添加到后缀表达式中)2.栈为空时,遇到运算符,直接入栈3.遇到左括号:将其入栈4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,括号不输出。5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈6.最终将栈中的元素依次出栈,输出。其实题目中已经给出原创 2020-12-14 16:24:24 · 1347 阅读 · 0 评论 -
后缀表达式求值
一、题目输入一行表示后缀表达式,数与数之间一定有空格隔开(可能不只一个空格),最后输入@表示输入结束二、分析后缀表达式,特点为运算符在两个操作数后,所可以用栈来实现。用一个栈来存储数,遇到运算符则弹出两个数来进行计算,然后将结果入栈。三、算法实现(主要代码)数据结构:栈。这里我用的是一个整型数组:a[1000]. char s[1000]; int i,x,f,e,d,tag,j=0,n; int a[1000]={0,}; gets(s); n=s原创 2020-12-14 16:19:35 · 3758 阅读 · 1 评论 -
单词检查(Ⅰ)- 顺序表实现
一、题目如果输入文件中有词vake ,检查程序就能发现其是一个错误的单词,并且给出 bake, cake或vase做为修改建议单词。修改建议单词可以采用如下生成技术:(1)在每一个可能位置插入‘a-‘z’中的一者(2)删除单词中的一个字符(3)用‘a’-'z’中的一者取代单词中的任一字符二、分析首先存入词典。然后查找,如果查到则over。没查到,进入修改系统。(1)在每一个可能位置插入‘a-‘z’中的一者,如果字典比该词的长度大一,比较两者的区别,如果满足条件,则输出。(2)删除单词中原创 2020-12-14 16:16:37 · 2285 阅读 · 1 评论 -
大爱线性表
一、题目定表和一个操作串S,求出执行S后的表,如果中途出现‘D’操作于空表,输出“error”。二、分析‘R’反转,‘D’删除,其实删除是头部,但是如果转置一次,再删除那么删除的就是最尾部的元素了。所以可以用一个计数器去计数目前为止转置的次数,然后头部和尾部用用针向下标标记,遇到‘D,如果是偶素则删除头,头部标记加一,否则删除尾部,尾部标记减一。最后分情况输出,问题解决。三、算法实现(主要代码)char a[100100];int s[100100];int main(){ in原创 2020-12-14 16:11:41 · 399 阅读 · 1 评论 -
交集
一、题目有两个相等长度的正整数序列A和B,都是有序的(递增排序),同时一个序列中没有重复元素,现在需要求这两个序列的交――序列C,同时打印输出二、分析首先要注意的是升序,两个集合是有序的。这个在后面是可以作为条件优化的。求交集。最直接的方式当然是按照定义,A集合的每一个元素去B集合中寻找,而且是升序,那么查找时一遇到大于的即可判定,为表示交集的元素。而且前一个元素判定的位置可以作为下一个元素开始查找的起点。先用数组存储A然后直接逐个输入B中的元素,开始按上述所说判断。判定为交集的用另一个数组储原创 2020-12-14 16:09:06 · 1064 阅读 · 0 评论 -
Josephus 问题(2)
一、题目N人围成一个环,每个人一个编号1—n,然后1、2报数,报2出局,其余人继续,直至最后一人。求该人的编号。有时间限制二、分析找规律:我直接写出了n从1—17的最终答案,分别为:1、1、3、1、3、5、7、1、3、5、7、9、11、13、15、1…发现其是以2的幂次方为一个轮回,然后奇数增长。分开更容易看清:1 1、3 1、3、5、7 1、3、5、7、9、11、13、15个数刚好为1、2、4、8三、算法实现(主要代码)算法实现如下: long long n,m,原创 2020-12-14 16:06:06 · 2258 阅读 · 8 评论 -
Josephus 问题(1)
一、题目N人围成一个环,每个人一个编号1—n,然后1、2报数,报2出局,其余人继续,直至最后一人。求该人的编号。二、分析我们可以用一个一维数组去储存,下标表示编号(0号不用),然后数组值全部赋值为0,报到2者数组值改为1,一直持续,直至最后一个0.三、算法实现(主要代码) int a[1001]={0,}; int flag,n,k,x,i=1; while(scanf("%d",&n)!=EOF) { if(1==n||2==n)原创 2020-12-14 16:00:56 · 1330 阅读 · 0 评论 -
复杂度分析(1)
复杂度分析(1)一、题目:多层循环的运行规律,分析多层循环的复杂度。 for(i=1;i<n;i++) for(j=1;j<i;j++)for(k=1;k<j;k++)printf("\n"); 问printf语句共执行了几次?这段代码执行完以后i+j+k值为多少?二、思路与分析如果直接用一个计数器去计数printf,那么必定会超时。但是仔细观察,不难发现其中的规律,得出数学计算公式。从而用O(1)的算法解决问题。首先是printf执行的次数,输入n从1-300,次数原创 2020-12-14 15:53:33 · 2314 阅读 · 0 评论