- 博客(30)
- 收藏
- 关注
原创 【数据结构初阶】二叉树--堆(顺序结构实现)
新插入的数据作为子结点(child),找到新插入数据的父结点(parent=(child-1)/ 2)(上面二叉树的性质),父结点和子结点进行比较,若父结点大于子结点,数据交换,不大于则不交换。如果有一个关键码的集合K={k1,k2,,k3,...,k(n-1)},把它的所有元素按完全二叉树的顺序存储方式存储,在一个一维数组中,并满足:Ki = K(2*i+1) 且 Ki >= K(2*i+2)),i = 0,1,2...,则称为小堆(或大堆)。大堆:父结点不小于孩子结点。
2024-09-01 20:23:30
632
22
原创 【数据结构初阶】二叉树--基本概念
对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统模拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。通俗点来讲,假设二叉树层次为k,除了第k层之外,每层结点的个数都达到了最大结点数,第k层结点个数不一定达到最大结点数,完全二叉树结点的顺序是从左到右的。一个结点含有的子树的根结点称为该结点的子结点,;
2024-08-19 17:30:04
2621
99
原创 【数据结构初阶】队列
1、概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有的特性。进行插入操作的一端称为进行删除操作的一端称为队列也可以数组和链表的结构实现,使⽤链表的结构实现更优⼀些,因为如果使⽤数组的结构,出队列在数组头上出数据,效率会比较低。
2024-08-10 18:31:58
2341
69
原创 【数据结构初阶】千字文章带你征服 “ 双向链表 ”(附源码)
初始化,尾插,头插,尾删,头删,删除指定位置的结点,删除pos结点之后的结点,销毁,查找,打印,顺序表和链表的比较
2024-07-31 17:33:28
1189
56
原创 【数据结构初阶】单链表经典算法题十道(详解+图例)—得道飞升(中篇)
创建新数组,遍历原链表,将链表中的值放到数组中,然后在数组中判断是否为回文结构。在链表中不可回找,但是数组可以回找,所以我们可以把链表中的数据放到数组中。3)从原链表的头结点和新链表的头结点开始遍历比较。1)找原链表的中间结点,“快慢指针”;2)将中间结点及之后的结点进行反转;
2024-07-28 09:54:27
511
34
原创 【数据结构初阶】单链表经典算法题十道(详解+图例)—得道飞升(上篇)
创建一个新链表,newhead,newtail 指向新链表的头结点,定义两个指针分别指向原链表的头结点,两个指针指向的数据比较大小,谁小谁尾插到新链表里面。在实例中,最后一个5结点被尾插到新链表中时,5结点的next指针指向的仍然是后面的6结点,所以最后返回的时候结果里面含有6,所以我们把最后一个等于val结点的next指针指向NULL即可!慢指针每次走一步,快指针每次走两步,当快指针走到链表的尾结点时,假设链表的长度为n,快指针走的路程是慢指针的两倍,2*慢=快,即慢指针走的路程是n/2。
2024-07-26 00:34:47
1428
41
原创 【数据结构初阶】一篇文章带你超深度理解【单链表】
前面我们学习了顺序表,实现了对数组内容增删查改等操作,但是顺序表仍然存在一些缺陷。中间/头部的插入删除,时间复杂度为O(N);增容需要申请新空间,拷贝数据,释放旧空间,这是不小的消耗;增容一般是成2倍的增长,大概率会有一些空间的浪费。那我们该如何解决上面的问题呢?下面我们来学习一下链表。1、链表的概念和结构链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现。2、链表(Single List,简写SList)的实现。
2024-07-24 20:57:53
1644
47
原创 【数据结构初阶】顺序表三道经典算法题(详解+图例)
通过把 src 指向的不等于 val 的数赋给 dst 指向的位置,实现把不等于 val 的数放到前面,而且刚好 dst 的值就是数组中不等于 val 的数据的个数,同时要注意循环的条件。通过 src 遍历数组,如果与 dst 指向的数据相等就跳过,不相等就先 dst++,再赋给 dst 指向的位置,限制条件 src
2024-07-20 15:27:29
769
36
原创 【C语言】自定义类型:联合和枚举
前面我们学习了一种自定义类型,结构体,现在我们学习另外两种自定义类型,和。1. 联合体类型的声明2. 联合体的特点3. 相同成员联合体和结构体对比4. 联合体大小的计算5. 用联合体判断当前机器大小端1. 枚举类型的声明2. 枚举类型的优点3. 枚举类型的使用。
2024-07-06 17:03:09
1065
19
原创 【C语言】刷题笔记 Day2
酷狗音乐为您提供由葛东琪演唱的高清音质无损悬溺mp3在线听,听悬溺,只来酷狗音乐!一开始刚接触的时候感觉有点难理解,现在,就这,有手就行呀,哈哈嗝~~~悬溺_葛东琪_高音质在线试听_悬溺歌词|歌曲下载_酷狗音乐。这里虽然输入的是一个浮点数,但是只取整数部分。表示的是3.156*10的7次方。多组输入,保存和不保存的代码书写比较。局部变量不初始化,默认放的随机值。%x 是十六进制的数据格式。%o是八进制的数据格式。
2024-07-04 19:31:22
548
8
原创 【C语言】刷题笔记 Day1
当我们从键盘上输入一个大写字母的时候,还要按回车键(\n)才能进入下一步,此时相当于我们同时输入了一个大写字母和 \n,那么运行后就会变成下面的结果。因为 getchar 一次只调用一个字符,还剩一个 \n,下次再进入循环的时候,就轮到将 \n 转为 * 了,该如何消除多余的 \n 呢?该如何结束这个程序呢?1. getchar 为输入函数,EOF(end of file)为文件结束标志,通常为文件结束的末尾。4. 加上一个 getchar 来读取 \n,但并未使用 \n,这样就可以消除掉 \n 了。
2024-07-02 12:23:45
812
17
原创 【C语言】操作符(上)
同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码和原码相互转换,其运算过程是相同的,不需要额外的硬件电路。赋值操作符 : = 、+=、-=、*=、/=、%=、==、&=、!、++ 、-- 、& 、* 、+ 、- 、~ 、sizeof 、(类型)、++、--、&、*、+、-、~、sizeof、(类型)两部分,2进制序列中,最高位的1位是被当做为符号位,剩余的都是数值位。对于移位操作符,不要移动负数位,这个是标准的未定义的。关系操作符 : >、>=、
2024-06-22 20:59:18
899
14
原创 【C语言】一篇文章带你深度理解函数
我们前面学到的 printf、scanf 都是库函数,库函数也是函数,只不过这些函数是现成的,我们只要学会就可以直接使用了,有了库函数,一些常见的功能就不需要程序员自己实现了,一定程度上提升了效率,同时库函数的质量和执行效率上更有保证。是全局变量默认是具备外部链接属性的,在外部的文件中想使用,只要适当的声明就可以使用;代码2,从输出结果看,i 的值有累加的效果,其实 test 函数中的 i 创建好后,出函数的时候 i 是不会销毁的,重新进入函数也就不会重新创建变量,直接上次累积的数值继续计算。
2024-06-14 20:59:20
1262
6
原创 【C语言】二维数组(详解)
前面我们深入学习了一维数组的相关知识,现在我们开始二维数组的学习之旅吧!1. 二维数组的创建1.1 二维数组的概念前面学习的数组被称为一维数组,数组的元素都是内置类型的,如果我们把一维数组作为数组的元素,这就是二维数组,二维数组作为数组元素的数组被称为三维数组,把二维数组以上的数组统称为多维数组。1.2 二维数组的创建定义二维数组的语法如下:1 type arr_name [常量值1] [常量值2];23 例如:
2024-06-12 14:31:07
3332
12
原创 【C语言】一维数组(详解)
有了下标引用操作符,我们可以轻松访问到数组中的元素了,比如我们访问下标为7的元素,我们就可以使用 arr[7],想要访问下标为3的元素,就使用 arr[3]。我们知道数组中所有元素的类型都是相同的,那只要计算出一个元素所占字节的个数,数组的元素个数就能计算出来。以后在代码中需要数组元素个数的地方就不用固定写死了,使用上面的计算,不管数组怎样变化,计算出的大小也就随着变化了。数组也是有类型的,数组算是一种自定义类型,去掉数组名留下的就是数组的类型。实现了数组的访问,现在我们也可以实现对数组中进行数据的输入。
2024-06-11 20:37:13
1341
9
原创 【C语言】分支与循环(下)
for 和 while 在实现循环的过程中都有初始化、判断、调整这三部分,但是 for 循环的三个部分非常集中,便于代码的维护,而如果代码较多的时候 while 循环的三个部分就比较分散,所以从形式上 for 循环要更优一些。goto 语句如果使用不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以我们的建议是能不用尽量不去使用,但是 goto 语句也非一无是处,在多层循环的代码中,如果想快速跳出使用 goto 就非常方便了。首先是执行判断表达式,表达式的值为0,循环直接结束;
2024-06-10 16:48:24
1168
3
原创 【C语言】分支与循环(上)
1. if 语句1. if 语句2. 关系操作符3. 条件操作符4. 逻辑操作符:&&,||,!5. switch 语句正文开始——C语言是。1. if 语句1.1 if如下:1 if (表达式)2 语句表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。在C语言中,0为假,非0为真,也就是表达式的结果如果是0,则语句不执行,表达式的结果非0,则语句执行。输入一个整数,判断是否为奇数1.2 else。
2024-06-09 19:54:07
627
7
原创 【C语言】字符函数和字符串函数
C语言标准库中提供了一系列方便我们操作和。1. 字符分类函数作用字符分类函数是专门用来做字符分类的,也就是一个字符属于什么类型的字符。头文件这些函数的使用需要包含头文件。islower能够判断参数部分输入的是否是小写字母。通过其返回值来判断是否是小写字母,如果是小写字母就返回非0的整数,如果不是,就返回0。
2024-06-04 00:11:02
695
6
原创 【C语言】scanf 详细介绍
里面会放置占位符(与printf()的占位符基本一致),告诉编译器如何解读用户的输入,需要提取的是数据是什么类型。占位符会忽略起首的空格,从 - 处开始处理,读取到 -13 停下来,因为后面的 . 不属于整数的有效字符。解读用户输入时,会从上一次解读遗留的第一个字节开始,直到读完缓存,或者遇到第一个不符合条件的字符为止。例子中,如果用户输入2020-12-12,就会正确解读数据,但是如果输入2020/12/12,处理用户输入的原理是,用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存进行解读。
2024-05-31 15:21:33
1208
4
原创 【C语言】数据类型与变量
其实每一种数据类型都有自己的取值范围,也就是存储的数值的最大值和最小值的区间,有了丰富的类型,我们就可以在适当的场景下去选择合适的类型。sizeof 在代码进行编译的时候,就根据表达式的类型确定了,类型的常用,而表达式的执行却要在程序运行期间才能执行,在编译期间已经将 sizeof 处理掉了,所以在运行期间就不会执行表达式了。& 我希望有个如你一般的人,如山间清爽的风,如古城温暖的光,从清晨到夜晚,从山野到书房,一切都没有关系,只要最后是你就好。可以在占位符 % 的后面加一个 + ,使正数显示 +。
2024-05-30 21:20:41
668
4
原创 【C语言】模拟实现strlen的三种方式
酷狗音乐为您提供由Nelly、Kelly Rowland演唱的高清音质无损Dilemmamp3在线听,听Dilemma,只来酷狗音乐!Dilemma_Nelly、Kelly Rowland_高音质在线试听_Dilemma歌词|歌曲下载_酷狗音乐。学习结束,一首歌送给你——方式2:指针-指针的方式。不要忘记三连哦~~~
2024-05-26 16:40:24
384
10
原创 【C语言】深入理解指针(1)
正文开始——1.内存与地址1.1 内存我们知道,计算机上在处理数据的时候,需要的数据是从内存中读取的,处理后的数据也会放在内存中,不同电脑中的内存大小也会不同,8GB\16GB\32GB等,那这些内存空间是如何高效管理的呢?其实计算机中常见的单位(补充):1 bit - 比特位 1 1 Byte = 8 bit2 Byte - 字节 2 1 KB = 1024 Byte。
2024-05-25 22:09:41
648
6
原创 【C语言】常见概念
每个C语言程序不管有多少行代码,都是从main函数开始执行的,main函数是程序的入口,main函数也被叫做:主函数。(IDE)用于提供程序开发环境的应用程序,一般包括代码编辑器,编译器,调试器和图形用户界面等工具。比如:msvc,clang,gcc就是一些常见的编译器,当然也有一些集成开发环境,如:VS2022,XCode,Devc++,Clion等。目前已知已经有上千种计算机语言,人们通过计算机语言写的程序,给计算机下达指令,让计算机工作的。在VS上写代码,我们是需要创建项目的,直接新建项目就🆗了。
2024-05-12 15:13:51
988
10
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人