- 博客(30)
- 收藏
- 关注
原创 探索数据结构:分支的世界之二叉树与堆
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
2024-07-04 10:37:40
1534
原创 探索顺序结构:栈的实现方式
栈(Stack)是一种常见的数据结构,它是一种“后进先出”(Last In First Out,LIFO)的数据结构。栈可以看做是一种特殊的线性表,只能在栈顶进行插入和删除操作。栈顶是允许操作的,而栈底是固定的。
2024-06-26 20:48:30
1665
原创 探索数据结构:便捷的双向链表
前面我们学习了单链表,它解决了顺序表中插入删除需要挪动大量数据的缺点,使单链表解决顺序表缺陷时,我们发现作为另一种形态出现的单链表似乎也有明显的缺陷。在部分功能实现时因为头结点的改变需要引进二级指针(或者采用返回等更为复杂的方法)导致代码更加复杂。寻找某个节点的前一个节点,对于单链表而言只能遍历,这样就可能造成大量时间的浪费。尾部以及指定位置插入、删除数据的时间复杂度为O(N),效率低下。为了解决这个问题,我们就要学习今天的主角——双向链表。
2024-06-03 10:08:37
1785
原创 探索数据结构:单链表的实践和应用
尾部插入删除效率还不错,中部或者头部插入删除需要挪动数据,效率低下。顺序表满了以后需要扩容,扩容本身也有一定的消耗。扩容存在空间浪费:一次扩的多了容易造成浪费,一次扩的少了可能要频繁扩容。这些大大增加我们的时间与空间成本。为了解决这个问题,就要学习我们今天要讲解的链表。链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。与顺序表不同,链表的存储数据在内存是随机分布的。链表中的最后一个结点的next指向空,next=NULL,
2024-05-27 10:10:03
2137
原创 探索数据结构:顺序表的实现与应用
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。简单来讲就是用一段物理地址连续的存储单元依次存储数据元素的线性结构,它与数组非常类似,但是相比于数组顺序表有一个非常明显的优点——可以动态内存增长空间大小我们常用的数组有很多的缺点:而使用顺序表的动态开辟的数组存储就方便很多静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空 间开多了浪费,开少了不够用。
2024-05-22 19:19:23
1717
原创 探索数据结构:入门及复杂度的解锁
数据结构与算法数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合,它涉及到如何组织和存储数据,以便在程序中进行高效的访问和操作。数据结构类型名称定义数组(Array)一组连续的内存空间,用来存储相同类型的数据。链表(Linked List)由一系列节点组成,每个节点包含数据和指向下一个节点的指针。栈(Stack)一种后进先出的数据结构。队列(Queue)一种先进先出的数据结构。树(Tree)由节点和边组成的层级结构。
2024-05-20 10:25:27
1575
原创 环形链表详解
环形链表是一种特殊类型的链表数据结构,其最后一个节点的"下一个"指针指向链表中的某个节点,形成一个闭环。换句话说,链表的最后一个节点连接到了链表中的某个中间节点,而不是通常情况下连接到空指针(null)。
2024-05-07 15:18:45
1022
原创 深入C语言:动态内存管理魔法
C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员。int arr[0];//柔性数组成员部分编译器可能会报错,struct S {int n;int arr[];//柔性数组成员结构中的柔性数组成员前面必须至少一个其他成员。sizeof返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
2024-04-29 19:02:38
1155
原创 深入C语言,发现多样的数据之枚举和联合体
枚举的定义与结构体类似enum 枚举类型名标识符1,标识符2,枚举类型名受自己定义,如:week,year…,标识符就是其中的枚举常量,如Mon,Tues,Wed…每个枚举常量可以用一个标识符来表示,也可以为它们指定一个整数值,如果没有指定,那么默认从0开始递增。和结构体一样联合也是一种特殊的自定义类型,这种类型定义的变量也包含有一系列的成员,但不同的是这些成员共用同一块空间(遂也被称作共用体)union UNchar c;int i;//定义了一个共用体类型int main()
2024-04-22 18:51:00
3783
原创 深入C语言:探索结构体的奥秘
可以定义指向结构体的指针,方式与定义指向奇特类型变量的指针类似定义方式:struct 结构体名*结构体指针名其中books是结构体名,struct_pointer为结构体指针名定义之后可以在上述定义的指针变量中存储结构变量的地址为了使用指向该结构的指针访问结构的成员,必须使用->运算符struct stu // 结构体类型 或 结构体名char *name;//姓名int num;//学号int age;//年龄char group;//所在小组//成绩//结构体指针char *name。
2024-04-15 19:41:43
2476
1
原创 深入C语言内存:数据在内存中的存储
大端存储模式:指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中小端存储模式:指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中具体是什么意思呢~首先我们得知道内存中数据是以16进制表示的int a=0x11223344//十六进制小端存储44332211低地址 高地址大端存储11223344。
2024-04-08 19:37:22
3087
1
原创 高精度算法(加、减、乘、除,使用c++实现)
在我们进行计算的过程中,经常会遇到的计算问题,也有可能会遇到小数点后几十位,几百位的情况,而我们面对这样的情况下,和的数据范围显然是不够使用的了。因此这时,我们就需要引入一个新的算法,叫做高精度算法:它是处理大数字的数学计算方法,在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除等运算。思想:高精度算法本质上是用模拟数字进行计算,再利用类似于数学里的,一位一位进行相关计算。
2024-04-02 20:13:03
3590
1
原创 深入C语言库:字符与字符串函数模拟实现
C语言的库函数,是我们经常在编写程序所用到的函数,我们可以借用库函数去实现各种各样的功能,在本篇文章,我们介绍的是C语言中字符串和字符的相关库函数,以及他们的模拟实现,通过模拟实现我们可以深入了解到库函数的工作原理,以便今后更好的使用。我们在学习C语言的过程中,除了使用最多的头文件,还会使用其他头文件,利用其中的库函数帮助我们简化代码的过程,比如像,等头文件,而今天带大家详细了解一下吧。
2024-03-25 20:40:31
2103
原创 深入C语言指针,使代码更加灵活(三)
在讲解函数指针变量之前,我们先思考一下什么是函数指针变量,我们可以同数组指针变量进行类比:数组指针—是指针—是存放指向数组的指针,是存放数组地址的指针;函数指针—是指针—是存放指向函数的指针,是存放函数地址的指针;数组是有地址的,那么函数是否也有地址呢?运行结果:我们发现:确实打印出来了地址,所以,我们可以通过 &函数名 的方式来获得函数的地址。
2024-03-18 19:56:37
2196
原创 深入C语言指针,使代码更加灵活(二)
在这里我们使用 &arr[0] 的方式拿到了数组第⼀个元素的地址,但是其实运行结果如下:我们发现数组名和数组首元素的地址打印出的结果一模一样,数组名其实就是数组首元素(第⼀个元素)的地址。
2024-03-11 20:27:35
2244
原创 深入C语言指针,使代码更加灵活(一)
地址是由地址总线产生的,32位的机器有32根地址线,地址上传输过来的电信号转换成数字信号后,得到的32个0/1组成的序列就是地址。在调用Swap1函数时,将a和b传递给了Swap1函数,在Swap1函数内部创建了形参x和y接收a和b的值,x和y确实接收到了a和b的值,不过x的地址和a的地址不⼀样,y的地址和b的地址不⼀样,相当于。这就是我们接下来要讲的const的作用啦。const如果放在int*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。
2024-03-07 19:43:13
1526
2
原创 初识C语言:走近循环
循环语句是用于重复执行某条语句(循环体)的语句,它包含三个部分,分别是初始化部分、判断部分和调整循环部分。C语言提供了3中循环语句,分别为while,do while和for。
2023-12-19 11:09:00
1085
原创 初识C语言:扩展世界观,选择语句之行
如果条件满足才能做某件事情,如果条件不满足就做另外一件事情,或者什么也不做。分支语句又被称为“判断语句”,正因为有了判断,才让程序有了很多的分支选择。
2023-12-13 10:27:10
1127
1
原创 初识C语言:与计算机的交流之输入与输出(scanf和printf)
我们学习和写博客就是输入和输出的过程,正如scanf和printf一样,输入了,自然需要输出才是完整的学习~
2023-12-09 20:11:28
1180
原创 初识C语言:自增与自减陷阱
先给a赋值为3,a++先返回自增前a的值,a再自增,也就是先把a=3赋值给b,此时b=3,a自增之后a=4;泊舟说:“此次的内容很少,但确是一个很容易错误的问题,希望大家都能很好的掌握~”此时++a,先对a进行自增,a=5,再将a赋值给c,此时c=5。前置++ 是先进行自增运算,再返回自增之后的结果;后置++ 是先返回自增之前的结果,再进行自增。但++和--放在前面和后面有什么区别呢?,即自减,其表示自身减 1。我们对上述代码一行行分析。这种写法我们称之为自增。
2023-12-08 12:20:39
407
原创 初识C语言:常量与变量中寻找数据类型
为了将标识符与变量名区别开来,习惯上标识符全部用大写字母表示。枚举常量将在以后的枚举类型里面为大家介绍今天讲到了c语言各种各样的数据类型,这将成为我们打开计算机的大门的第一步,我也会持续不断为大家带来更新的~
2023-12-07 13:36:27
719
1
原创 初识C语言,计算机语言的基石
C语言是一门面向过程的计算机编程语言,与 C++ , Java 等面向对象的编程语言有所不同。C 语言是一门通用计算机编程语言 ,广泛应用于底层开发。C 语言的设计目标是提供一种能以简易的方式 编译 、处理低级 存储器 、产生少量的 机器码 以及不需要任何运行环境支持便能运行的编程语言。printf是一个库函数,它的功能是在标准输出设备(⼀般指屏幕)上进⾏信息的打印。上⾯的代码是使⽤printf函数打印字符串。只要把想要打印的⼀串字符放在双引号中并传递给printf函数就可以打印。
2023-12-06 20:55:44
1175
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人