![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 75
数据结构及语言学习
巨人旁的一指叶
日拱一卒无有尽,功不唐捐终入海
展开
-
哈夫曼树算法思想设计内线电话号码
一个单位有12个部门,每个部门都有一部电话,但是整个单位只有一根外线,当有电话打过来的时候,由转接员转到内线电话,已知各部门使用外线电话的频率为(次/天):5 20 10 12 8 43 5 6 9 15 19 32。利用哈夫曼树算法思想设计内线电话号码,使得接线员拨号次数尽可能少。哈夫曼使用自底向上的方法构建二叉树,避免了次优算法Shannon-Fano编码的最大弊端──自顶向下构建树。同一符号可以有不同的码长,即编码方法并不唯一,其原因是两支路概率合并后重新排队时,可能出现几个支路概率相等,造成排队原创 2022-12-05 23:43:14 · 1179 阅读 · 0 评论 -
先缀表达式构建表达式二叉树
在表达式二叉树的学习中,有很多有趣的构造其表达式二叉树,其中先缀表达式构建表达式二叉树常见有很多都是利用递归的方式去构建,但在阅览的一篇文档中,引出了非递归方式构建其表达式二叉树思想,虽然相对更麻烦,但在其代码实现,探索上还是很有意义的.先缀表达式构建表达式二叉树(非递归)c语言实现:先缀表达式:*-23+45如图,如果从左到右读取先缀表达式,发现操作符就将其入栈,发现操作符的第二个操作数之后,将它们组织成最小的子树,然后操作符出栈,继续遍历下一个字符。在这个过程中,操作数是不入栈的,栈里只有操作原创 2021-03-06 21:58:31 · 3851 阅读 · 0 评论 -
常见全排列生成算法简介
一、全排列的定义当从n个不同元素中任取m(m≤n)个元素,按照某特定的顺序排列起来,则将这个m个元素叫做一个排列。当m=n时所有的排列情况叫全排列。比如1,2,3,4四个元素的全排列:1234,1243,1324,1342,1423,14322134,2143,2314,2341,2413,24313124,3142,3214,3241,3412,34214123,4132,4213,4231,4312,4321由此可知全排列的公式:f(n)=n!(定义0!=1)二、常见的几种全排列生成算法转载 2021-02-05 20:20:30 · 2846 阅读 · 1 评论 -
实验设计-利用栈实现计算器
1.实现一个简单的计算器,输入一个包含圆括号、加减乘除、求余等符号组成的算术表达式字符串,输出该算术表达式的值。要求:(1)系统至少能实现加、减、乘、除、求余等运算;(2)利用栈实现并将表达式结果输出。1.算法设计及算法步骤:程序分析:计算器功能实现,利用顺序栈实现中缀表达式到后缀表达式的转变,继而进行相应的(+,-,*,/)简单运算。中缀表达式转后缀表达式:申请一段连续的顺序栈字符空间进行运算符存储,以便输入输出顺序控制。通过一个数字数组和一个字符数组保存后缀表达式。两个数组同步数组下标,当原创 2021-02-28 17:47:56 · 3367 阅读 · 0 评论 -
从java转c语言
从java转c语言在专升本之前,以前的学校计算机学习主要是应用型围绕着Java来开展课程的,期间也做了不少Maven+SSM开发的项目,并能在实训课上独立开发这样的项目,但在专升本后,步入本科学习阶段,不管是学习数据结构课程,还是为以后考研做准备,因为考研专业课算法题很多都强调用C,C++语言开发,所以为了快速从Java转C语言,这里我就记录下其中主要差别,以及着重要点.小知识:C语言通常通过return返回函数运行结果(true,false),而通过指针参数返回结果数据一般来讲,当对象为指针时需用原创 2021-01-14 17:47:04 · 3219 阅读 · 0 评论 -
使用循环队列C语言实现杨辉三角
摘要:在一次数据结构实验课上,老师提出了使用队列实现杨辉三角的课题,但当时所接触的杨辉三角一直都是以二维数组的方式实现,类似于一维数组的队列去实现杨辉三角,这是我一直想不出来的,直到我看到了下面这一篇文章,作者给出了用队列实现杨辉三角的算法图,这个算法令我豁然开朗,觉得这个算法在杨辉三角的实现上,是很不错的一个算法.但作者在文章中并没有写出实现步骤,下面我就以c语言循环队列去实现这个算法.算法参考来源: https://zhuanlan.zhihu.com/p/896671451.算法分析:程序分析原创 2021-01-14 20:06:44 · 1957 阅读 · 3 评论 -
数组循环移位问题
有关数组循环移位问题,在 借鉴文章中了解了三个解决方法.首先第一个循环换位算法,就不多说了.我们从第二个算法开始三次反转算法:三次反转算法是通过三次反转来完成循环移位的,比如数组[1,2,3,4,5],然后向左移三步,可以通过以下函数完成:reverse(0,2) ->[3,2,1,4,5]reverse(2,4) ->[3,2,1,5,4]reverse(0,4) ->[4,5,1,2,3]若把移步数记为p,数组有n个数,则有:reverse(0,p-1)原创 2021-02-07 17:36:34 · 978 阅读 · 0 评论 -
C语言结构体作为函数参数初始化
首先:一定要谨记C语言中未初始化变量不能拿来使用,不能作为函数参数,是可以以传地址方式作为函数参数.前言:一般来讲,我们会把初始化结构体的代码提取出来,封装到init()函数中,而通过将结构体变量作为函数参数来完成初始化,但有的时候比如,结构体变量作为参数,在初始化函数中用malloc动态分配内存,这样的行为不能完成外面的变量初始化.这就有可能导致未初始化函数使用的问题.通过各种实验发现,首先要将函数中初始化过程分为两类:1.对结构体成员变量直接赋值2.使用malloc动态分配内存后赋值1.对结构原创 2021-03-06 11:20:57 · 3856 阅读 · 0 评论 -
C语言获取结构体成员变量地址
在写一个程序时,犯了一个低级错误,主要就是对于值传递与地址传递的概念理解不够深.下面我通过一个小实验例子加以说明其区别:值传递:函数传值时,形参会首先根据其定义类型开辟新的空间,并将其参数值复刻到新的内存空间中,新的内存空间开辟也就意味着其存储地址的改变,而函数中对其参数的操作,也只是对于新空间内操作,并不会对函数外,传的值作影响,即两个是完全不同的空间.地址传递:通常通过指针变量作为参数,由于指针变量是保存地址的变量,所以在通过指针变量去接收时,是传的地址,也就是说,在内存空间中,指向的是同一内存块,原创 2021-03-06 17:23:44 · 13157 阅读 · 1 评论 -
C语言学习问题汇总(VS)
在C语言中,遇到的奇奇怪怪的问题汇总,开发工具为:VS20191.动态内存分配失败:在非main.cpp即主模块中使用到了malloc()函数,但未在模块中引入<stdlib.h>库由于malloc()函数,其是<stdlib.h>库中的内容,若不引入库,将无法动态分配内存,就会导致动态内存分配失败,变量<无法读取内存>2.使用未初始化的变量:在利用结构体作为参数时,要注意如果使用不当,在调用init()初始化函数结果不一定会影响到外面的变量,这就导致了外面原创 2021-03-05 23:46:33 · 301 阅读 · 0 评论 -
进制转换总结
前言:在学习计算机组成原理第二章-运算方法和运算器时,遇到了进制转换问题,作为计算机学生,关于进制转换还是要清楚了解的,很早就想总结下来了,这里就记录一些计算方法.文章大概内容:十进制,二进制,间整,小数转换将二进制、八进制、十六进制转换为十进制整数部分:小数部分:将十进制转换为二进制、八进制、十六进制:整数部分:十进制转换为N进制,用其数对N不断取余,直到商为零为止,然后逆序排列其余数,得到的数即是N进制后的结果:如图所示:将十进制数字 36926 转换成八进制的过程:从图中得转载 2021-03-04 23:26:26 · 924 阅读 · 1 评论