自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 赫夫曼树(一)

为方便理解赫夫曼树,我们先用一个简单的例子来理解。现在很多小学学科成绩弃用了百分制的评分方法,而选择用优秀,良好,中等,及格和不及格这样模糊的词来进行评教。在评等级的时候,老师自然不是随心所欲的,而是在成绩出来之后,再统一转换为五级制的成绩。if(a

2023-02-02 20:40:09 178 1

原创 二叉树的创建和遍历

二叉树的创建可以选择顺序存储方式创建二叉树和链式存储方式创建二叉树。我们为了创建一棵完整的二叉树,需要对普通的二叉树进行拓展,如图所示:其实建立二叉树也是利用了递归的原理。只不过在原来应该是打印结点的地方,改成了生成结点,给结点赋值的操作而已。大家可以先看后面的二叉树的遍历,再来看二叉树的创建。

2022-11-29 21:13:27 6132

原创 树和二叉树

树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。n=0时称为空树。在任意一颗非空树中:(1)有且仅有一个特定的称为根(Root)的结点,它只有直接后继,没有直接前驱;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,......Tn,其中每一个集合本身又是一棵树并且称为根的子树(SubTree)。一颗二叉树是节点的一个有限集合,该集合或者为空,或者是由一个根节点加上两根分别称为左子树和右子树的,互不相交的,分别称为根节点的左子树和右子树的二叉树组成。

2022-11-26 18:46:15 267

原创 回溯法求解迷宫问题

也就是说在起始位置先对左边的下一个位置能否通行进行判断,如果可以,机器人向前走一步并将小机器人当前的信息存放在栈中,再对下一个位置的前进方向进行试探。所以从[5,10]位置开始向后回溯,[5,10]位置四个方向均试探完毕都不通,对此位置记上不通的标记(用数字2表示)然后退回[4,10]位置,将[4,10]位置时小机器人存放在栈中的信息提取出来,继续下一个方向的试探。从入口[1,1]位置开始,先对1号方向进行试探。1号方向为墙,则对2号方向进行试探,2号方向也为墙,再对3号方向进行试探,3号方向可通行。

2022-11-20 11:40:27 1181 1

原创 数据结构 队列

为了避免当只有一个元素时,队头和队尾重合使处理变得麻烦,所以引入两个指针,front指针指向队头元素,rear指针指向队尾元素的下一个位置,这样当front等于rear时,此队列不是还剩一个元素,而是空队列。也就是说,队列满时,数组中还有一个空闲单元。从上面得出,但是顺序存储,若不是循环队列,算法的时间性能是不高的,单循环队列由面临着数组可能溢出的问题,所以我们还需要研究一下不需要担心队列长度的链式存储结构。如果为空队列时,也就是插入的这个数据时队列的第一个数据,队头指针队尾指针均指向待插入结点。

2022-11-18 18:27:38 1356 4

原创 数据结构 栈

栈(stack)是限定仅在表尾进行插入或删除操作的线性表。也就是说,栈内数据的存储只能是先进后出出入的一端叫作栈顶(top),另一端叫作栈底(bottom),不含元素的空表成为空栈。对栈插入数据叫作入栈或压栈,对栈删除元素叫作出栈或者弹栈。假设栈S=(a1,a2,...,an)则称a1为栈底元素,an为栈顶元素。栈中元素按a1,a2,...,an的次序进栈,退栈的第一个元素应为栈顶元素。换句话说,栈的修改是按后进先出的原则进行修改的。为更加形象的了解原理。举个例子:手枪子弹的压入和弹出。

2022-11-17 21:48:20 230

原创 Linux系统学习(二)编译链接

Linux提供管道符合“|”,作用是命令1的输出内容作为命令2的输出内容。通常与grep命令一起使用。格式:命令1|命令2需要注意的是管道符的使用有两个条件:1.管道命令只能处理前一个命令的标准输出,而不能处理标准错误;2.管道命令右边命令必须能够接收标准输入。文件是一个外存的概念,文件只存在于“外存”(硬盘,U盘,网盘)中,文件由两部分构成,文件名和文件主体。文件的分类:可执行文件,不可执行文件。

2022-11-14 00:25:42 615

原创 双向链表的总结

可以选择按照1,2,4,3的顺序进行修改,即先修改待插入结点pnewnode的两个指针域,再修改插入位置的下一个结点的prior域,最后修改待插入位置的上一个结点的next域。现在给这四个指针域标号,带插入结点pnewnode的next域记为1,待插入结点pnewnode的prior域记为2,插入位置的上一个结点的next域记为3,插入位置的下一个结点的prior域记为4。分别为:待插入结点pnewnode的两个指针域,以及插入位置的上一个结点的next域和插入位置的下一个结点的prior域。

2022-11-04 01:57:57 305

原创 数据结构 链表

线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)因此,为了表示每个数据元素a(i)与其直接后继的数据元素a(i+1)之间的逻辑关系,对数据元素a(i)来说,除了存储其本身的信息之外,还需要一个指示其直接后继的信息(即直接后继的存储位置)。然后,让指针p提前出发,向后走|len1-len2|步,则这时,指针p和指针q分别对于尾结点的距离相等,则这时,p和q同步向后走,每走一步,判断一次,是否指向同一个结点,如果是,则找到了第一个相交点。

2022-10-28 15:35:11 400 2

原创 Linux系统的学习(一)

Linux系统是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯·托瓦兹在1991年首次发布,之后,再加上用户空间的应用程序,就成为Linux操作系统。严格来讲,Linux则常用来指基于Linux内核的完整的操作系统,它包括GUI组件和许多其他实用工具。Linux是自由软件和开源代码软件发展中的最著名的例子。只要遵循GNU GPL,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。

2022-10-23 15:16:16 503

原创 数据结构 顺序表

至于每个数据元素的具体含义,在不同的情况下各不相同,它可以是一个数或一个符号,也可以是一页书,甚至其他更复杂的信息。顺序表的操作需要挪动元素,插入的话,需要向后挪动,删除的话,需要向前覆盖,时间复杂度O(n),效率不高。在顺序表的增删过程中,由于存在数据已满或者数据为空的情况,在此基础上进行增删数据,程序容易崩溃。有且只有一个开始的结点,并且除了开始结点外,其余结点都有直接前驱,并且除了结束外,其余结点都有直接后继。按值删除元素时,需要确定该值所在的数据在什么位置,得到该数据的位置之后,进行按位置删即可。

2022-10-18 00:14:14 371

原创 字符型和整型的转换函数实现

如果把八位数据当做有符号型来看待,第一位数字为符号位,如:1111 1111 第一位为符号位值为-127;unsigned来表示无符号,对于char,int,short,long等类型可以使用无符号类型来修饰,float,double浮点类型不可以用无符号类型来修饰。“-123”转为-123;在C语言操作中,如果遇到无符号数与有符号数之间的算术操作,编译器会自动转化为无符号数来处理;“+-+++123”转为-123;有符号数和无符号数在进行比较运算时,有符号数因式转换成无符号数(底层的补码不变)

2022-10-07 23:46:09 450

原创 文件的总结

文件缓冲区是系统自动在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”数据存储过程:内存——>文件缓冲区——>磁盘从内存向磁盘输出的数据会送到内存的缓冲区,等装满缓冲区后一起送到磁盘上。EOF是文件的结束符,是一个宏定义1.EOF是end of file 的缩写,表示“文字流”的结尾;2.EOF是一个定义在头文件的常量,一般为-1;3.除了表示文件结尾,还可以表示标准输入的结尾;

2022-10-03 01:17:02 501

原创 结构体的总结

来表示,其中e是表示数据元素的变量,而ElemType则是它的类型,ElemType的含义就是“数据元素的类型”,是一个抽象的概念,是表示我们所要使用的数据元素应有的类型。1.C语言中的数据结构有整形(int,long,......),浮点型(flaot,double),字符型(char),布尔类型,数组,字符串等,但是这些在实际应用中是不够的。(1)用结构体变量的成员做参数。(3)可以引用结构体变量成员的地址,也可以使用结构体变量的地址(说明:结构体变量的地址主要用做函数参数,传递结构体变量的地址)...

2022-08-09 17:07:02 280

原创 动态内存的总结

此函数的值(即“返回值”)是所分配区域的第一个字节的地址,或者说,此函数是一个指针型函数,返回的指针指向该分配域的第一个字节。——摘自《C语言程序设计》用calloc函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size。在2中,数组a为整型占据四个字节,所以对于啊[0]来说,其值为(00000001 00000001 00000001 00000001),即十进制的16843009.其作用是在内存的动态存储区中分配n个长度为size的连续空间,这个空间一般比较大,足以保存一个数组。.

2022-08-04 17:49:38 196

原创 递归函数的总结

函数调用的时候,每次调用时要做地址保存,参数传递等。具体时每次调用函数本身要保存的内容包括:局部变量,形参,调用函数地址,返回值。那么,如果递归调用N次,就要分配N次局部变量,N次形参,N次调用函数地址,N次返回值,势必效率低下。4.递归函数中,位于递归函数调用后的语句的执行顺序和各个被调用函数的顺序相反。将问题规模不断减小,函数不断分解,直到问题可解决之后。3.递归函数中,位于递归函数调用前的语句和各级被调用函数具有相同的执行顺序。分解:大规模问题分解成小规模问题,直到小规模的问题得到解决。...

2022-08-04 14:46:47 502

原创 my_strcpy,my_strcat,my_strcmp函数的功能实现

2)如果在复制前未对str1数组初始化或者赋值,则str1各字节中的内容是无法预知的,复制时将str2中的字符串和其后的‘\0’一起复制到字符数组1中。说明:字符串比较规则是:将两个字符串自左向右逐个字符相比较(按ASCII码值大小比较)直到出现不同的字符或者遇到‘\0’为止。作用是把两个字符数组中的字符串连接起来,把字符串2接到字符串1后面,结果放在字符数组1中(字符数组1的地址)说明:(1)字符数组1必须定义的足够大,以便容纳被复制的字符串2。说明:(1)字符数组1必须足够大,以便容纳新的字符串。...

2022-08-04 12:19:17 743

原创 指针的总结(2)

将变量i,j定义为count类型,而count等价于int,因此i,j是整形。在程序中将i,j定义为count类型,可以使人更一目了然地知道它们是用于计数的。intconst*constpp指向的地址空间的取值和p指针的指向都不能改变。intconst*p以及constint*pp指向的地址空间的取值不能改变。counti,j;//用count定义变量i和j,相当于inti.j;//用新类型名定义变量,相当于char*p;(1)用typedef只是对已经存在的类型指定一个新的类型名。...

2022-07-29 20:48:55 327

原创 指针的总结(1)

是将指针变量指向下(上)n个元素的运算。即=+(-)sizeof()*n.当计算机执行自增(减)运算后,指针变量实际增加(减少)为指针变量类型的字节数。即=+(-)sizeof()。指向整形数据的指针类型表示为“int*”,读作“指向int的指针”或简称“int指针”。作用是以八进制数形式输出指针变量p的值,如果p指向了a,就是输出了a的地址,即&a。(4)指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量。......

2022-07-26 20:05:08 626

原创 算法效率的总结

在进行算法分析时语句的总执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。内层循环时间复杂度在线性阶时已经得到为O(n),外层循环为时间复杂度为O(n)的语句再循环n次。对于分支结构而言,无论是真,还是假,执行的次数都是恒定的,不会随着n的变大而发生变化,所以单纯的分支结构(不包含循环结构中),其时间复杂度也是O(1)。总结如果算法与问题规模(问题的大小n)无关,执行的算法的次数恒定(执行时间恒定的算法),我们称之为具有O(1)的时间复杂度,又叫常数阶。...

2022-07-21 19:42:13 756

原创 一维数组内容总结

2)快速排序任选某一记录,比较其关键字与所有记录的关键字,并将关键字比它小的记录全部放在它的前面,将比它大的记录均存放在它的后面。(1)数组元素总个数求法sizeof(arr)/sizeof(arr[0])前提是sizeof必须和arr处于同一作用域。3.使一个数组中的元素全部为0,可写为inta[5]={0,0,0,0,0};2.给定数组{1,2,3}添加一个元素value0,使数组变为{0,1,2,3}(1)比较相邻的元素。(1)方括号中的常量表达式表示元素的个数,即数组的长度;...

2022-07-20 20:20:35 629 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除