自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构之二叉树相关的计算

上一篇对于树的遍历,进行了暴力构造树,那么该如何知道树有几个节点呢?最简单的办法就是创建一个计数器size,跟随递归遍历进行统计.这是最简单最容易想到的办法,但不是最高效的办法.因为每次调用递归,创建一块函数栈帧,都有一个size.那么这个思路的问题就在每个栈帧都会有个size,却没有累加起来,用的都是自己的size.

2023-12-28 17:16:57 804 1

原创 数据结构之二叉树的遍历

先来回顾二叉树的结构,对于看到的任何二叉树,都拆分成三个部分 : 根 , 左子树 , 右子树 .而左右子树可以继续拆成这种形式.真正需要学习二叉树,首先需要了解它的前,中,后序.

2023-12-27 20:36:43 799 1

原创 数据结构之二叉树与堆

将首尾进行交换,将根节点放到尾,再进行尾删,而对于顺序表来说尾删的代价很低,只需要将个数进行自减.这样就保证了左右子树没有被破坏.依旧是小堆.但由于是小堆,交换后大概率是将大的数放到了根节点,所以需要进行向下调整算法,但与之前插入数据进行的方式不同,这里的是将左右子树的根节点较小的进行交换,接着进入到对应的子树后再次进行向下调整算法,直到换到叶子,从这个例子来看可能这样的删除是有效的,但只是偶然,如果把没删除之前的18和19交换位置,那结果就是错的了.27的位置也是错误的.所以这种方法是不可行的.

2023-12-26 12:23:15 853 1

原创 TOP-K问题

使用这种方便的检测方法 : 先产生1w个数进行取模,取摸到100w以内,这就让产生的数在100w以内,再任意写10个下标.对这10个下标的数据进行修改,修改成超过100w的数据,最后进行top-k进行选择,写的函数必须将这10个数进行选出来,否则函数有bug.将N个数放在文件里,进行读取,找出最大的10个数,先在文件中写入N个随机数.但使用time进行产生随机数时,库里面只能产生3w多,所以多出来的都是重复的,那在rand()后加上i就能减少重复的数据.在N个数中找最大的前K个.前提:N远远大于K.

2023-12-25 22:44:40 381

原创 数据结构之队列

那按照链表的思路,进行尾插,传的参数是头结点的指针,而且是二级指针才能改变,这样就会导致时间复杂度为O(n),同样多传一个尾指针,也需要二级指针,那么就会变得很复杂.这里实现队列,使用单链表来进行实现.若单链表行不通则使用双向链表.入队则对应着链表的尾插,出队对应着头删,那么这样看,其实单链表就足够实现队列了。队列,顾名思义,就相当于日常生活中排队一样一端入队,另一端出队.所以入数据的一端叫队尾,另一端出数据叫对头,那遵循的规律就是先进先出.取出元素的前提是队列不为空,所以先断言,再返回头指针指向的数据。

2023-12-23 19:41:53 365 1

原创 数据结构之栈

可以看到,其实并不是按照之前所想的那样,因为当5和4进栈的时候,3已经出栈了,不能和3相比,只能跟在栈里的数据相比,所以栈的后进先出是相对的.所以入栈顺序和出栈顺序是一对多的关系,入栈顺序只有一种;首先进行断言,确保结构体不为空.接着可以选择将a置为空,容量为0.方便之后的扩容.最后才是栈最重要的点,关于栈顶top是什么?因为要把栈置为空,所以将top为0.当插入了一个数据后,top为了继续指向栈顶,top依旧为0.这就出现了冲突.当看到top等于0的时候,就无法判断是一个元素还是空。

2023-12-23 11:28:10 882 1

原创 移除链表元素

写到这里还有一个小问题,出现了一个野指针,按照上面的图片尾插后,5结点的next依旧指向下一个6结点.全程并没有改变tail的next指向.并且当链表为空的时候,while循环就不会执行.那么tail也就为空,所以需要加上判断.答案是不需要.因为尾插到新链表只是将新的头结点指向了不是val的结点,原链表继续指向该结点.而尾插的实现最好不要使用学习单链表时候的尾插.因为学习到的是创建一个新结点尾插,而在这结点已经存在,就不需要创建.所以这里的尾插仅仅只是指向结点.给你一个链表的头节点。

2023-12-09 13:05:00 17

原创 数据结构之单链表

还是老样子,创建一个结构体,中间包括数据域和指针域,指针域指向的是下一个结构体的地址,所以类型是结构体指针//数据域//指针域}SLNode;这里介绍的链表是无头,单向不循环的链表这里再对pphead进行一个解释.pphead: 是二级指针,类型为SLNode**,指向的是plist的地址,不能为空.是一级指针,类型为SLNode*,可以为空,代表没有结点的空链表.: 是一级指针,类型为SLNode*,可以为空,代表只有一个结点的链表.

2023-11-25 18:03:38 52 1

原创 数据结构之顺序表

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储.在数组上完成数据的增删查改.

2023-11-08 15:48:27 69 7

原创 字符函数memmove的使用以及模拟实现

前面介绍了对memcpy的使用以及模拟实现 , 明白了memcpy能够对任意数据类型进行指定字节数进行拷贝 .那么 , 当遇到目标空间与源空间在同一数组内,也就是数组自己拷贝自己的情况 , 对于memcpy的模拟实现的代码则无法完成任务 .在库函数的标准下 ,memcpy是可以完成数组重叠拷贝 , 而在库函数的规定中memcpy专门用于两个数组之间的拷贝 , memmove则用于数组重叠拷贝 .所以,接下来针对memmove进行模拟实现。

2023-10-17 19:13:49 46

原创 字符函数strcat的使用以及模拟实现

打开网址,在里面查看函数的相关介绍翻译过来,strcat函数其实是对字符串进行数据追加,在目标空间指针所指向的'\0'处,将需要追加的字符串赋值到此处.函数所接受的参数 :参数1(char* dest) : 指向目标空间的字符指针.参数2() : 指向源字符串的字符指针.函数的返回类型 :返回类型(char*) : 返回的是字符指针.

2023-10-10 22:31:07 177 4

原创 对memcpy进行模拟实现

mencpy函数与strcpy函数的区别在于 , 前者(memcpy)可以进行任意类型的数据拷贝,并指定拷贝多少字节. 而后者(strcpy)则只能拷贝字符串,且不能指定拷贝多少字节,直到遇到 '\0' ,才会停止.对于函数能够处理任意类型的数据时,有必要强转成对应的字符类型,这里是强转成了char * 字符指针的类型,便于指针+1后跳过一个字节.

2023-09-21 21:59:22 114 5

原创 关于Git本地的使用

这允许快速的本地操作,避免了对远程服务器的频繁访问,并且即使发生服务器故障,开发者也可以使用他们本地拥有的完整副本继续工作。这样,我们就可以组织协作开发,从而达到高效、可控的开发流程。Git 中的提交历史记录非常有用,它可以让我们了解任何一个文件的历史修改记录,并且可以很方便地查看每个提交的具体内容。前面提到Git的追踪文件是实现版本控制的关键, 所以在对话框中输入指令便可查询上一步中提交到暂存区中文件的状态.的时候,意味着a文件被修改了,需要重新提交到暂存区建立新的追踪,替换之前暂存区的a文件.

2023-07-12 13:56:34 603 1

原创 开启我的博客之旅

有句古话:活到老,学到老,在这编程行业里,35岁就要面临事业的社会里,我要顺应时代的潮流,不能落伍.但万丈高楼平地起,再高的大楼也需要扎实的基础,拔高的情况下,也要巩固基础.未来10年掌握好C/C++和Java的基础和进阶知识,以及其他衍生知识,能够自己独立写出程序,满足需求。在互联网高度发达的时代,利用好网络上的资源是当代年轻人的必修课,首先利用网络资源学习基础,学完后自行总结所学的知识,并汇总成一篇博客来分享,随后进行适当的刷题训练,学会和动手做出来是两码事.

2023-07-11 11:23:06 73 2

空空如也

空空如也

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

TA关注的人

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