自定义博客皮肤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)
  • 收藏
  • 关注

原创 二叉树和哈希表

二叉树的递归定义为:二叉树或者是一棵空树,或者是一棵由一个根节点和两棵互不相交的分别称作根的左子树和右子树所组成的非空树,左子树和右子树又同样都是二叉树。哈希表的核心是哈希函数。哈希函数是一个将输入数据(通常是一个字符串或其他数据类型)映射到一个固定大小的整数(哈希值)的函数。哈希函数的设计很关键,如果哈希函数设计不当,可能导致大量冲突,从而降低哈希表的性能,甚至使操作时间复杂度退化为O(n)。哈希表通常需要预留一定的空间来处理可能的冲突,这可能导致空间利用率不高,尤其是在数据量较小的情况下。

2024-12-25 23:21:50 430

原创 数据结构-栈和队列

栈是一种后进先出(LIFO)的数据结构,就像一个只允许在一端进出的管道,最后进入栈的元素最先被取出,操作主要在栈顶进行,有入栈和出栈两种操作。例如,把盘子一个个往上叠放,取盘子时从最上面开始拿,这体现了栈的特点。队列是先进先出(FIFO)的数据结构,类似排队,先进入队列的元素先被取出。它有两个操作端点,一端进行入队操作(添加元素),另一端进行出队操作(删除元素)。比如,我们在排队时先排的先出队。

2024-12-22 22:00:01 830

原创 内核链表补充

它是双向链表,每个节点包含指向前一个节点和后一个节点的指针,这使得在链表中向前和向后遍历都很方便。与普通链表不同的是,内核链表的节点结构通常只包含指针成员,数据部分是通过将链表节点结构体嵌入到其他包含实际数据的结构体中来实现的。内核链表是一种用于操作系统内核的数据结构。

2024-12-20 22:20:57 335

原创 双向链表小结

它和单向链表的主要区别是能双向遍历。比如,可以从链表头开始向后查找节点,也能从链表尾开始向前查找。这在需要频繁访问前驱节点的操作中很有用,像在一些文本编辑器中,双向链表可用于存储文本行,方便向前或向后浏览文本内容。双向链表也是一种链表数据结构。在双向链表中,每个节点包含三个部分:数据域、指向前一个节点的指针(前驱指针)和指向后一个节点的指针(后继指针)。

2024-12-19 23:10:14 355

原创 数据结构 -链表

3.如果数组频繁地插入、删除元素,特别是非顺序的时需要移动大量数据,就可能导致内存碎片。因为数组元素在内存中是连续存储的,当中间元素被删除后,空出的空间很难被其他大小不合适的数据利用,这就形成了内存碎片。1.本质区别是单向链表在内存中的存储是动态的不连续的,而数组则是连续的。数据域用于存储数据元素,指针域用于存储下一个节点的地址,这样就通过指针将各个节点连接起来,形成一个链状结构。2.数组由于在内存中是连续的,因此访问数据更方便,而链表也必须通过前驱节点访问故而访问元素是必须进行遍历,访问效率更低。

2024-12-17 20:41:41 427

原创 内存相关内容

例如,在动态分配内存的堆区,如果先分配了一块较大的内存,然后释放了中间的一部分,就会形成内存碎片。例如,在C语言中,使用malloc分配了内存,但没有用free去释放。例如,程序中定义的常量字符串如const char* str = "hello",这个"hello"就存储在常量存储区,不可修改。比如,当采用固定大小内存分配单元来分配内存时,若要存储的数据小于分配单元大小,就会产生内部碎片。内存泄漏是指程序中已动态分配的堆内存由于某种原因,在使用完毕后没有被释放,导致这部分内存一直被占用。

2024-12-17 09:01:28 586

原创 实现单词的简单倒置和atoi函数

4. 检查溢出:在每次累加之前,检查是否会导致整数溢出。如果会,返回 INT。3. 还个字符处理数字部分:用 isdigit 检查每个字符是否为数字。2.处理正负号:检查字符串是否有正负号。如果有,设置 Sign 变量。1. 跳过前导空格:使用 isspace 函数跳过所有空白字符。如果是,则将其转换为相应的整数并累加到 result 中。5.返回结果:最后返回带符号的结果。1.空字符串或仅包含空白字符串。_MAX 或 INT_MIN。1.将整个字符串逆序。2.再将每个单词逆序。

2024-12-11 22:58:39 730

原创 指针基础小结

如果是int *类型的指针,就应该指向int类型的变量。因为指针运算会根据指针类型进行,比如int *指针加1,实际地址会增加sizeof(int)个字节。当函数的参数是指针时,在函数内部可以通过指针修改函数外部变量的值,这提供了一种在函数间共享和修改数据的有效方式。,这里p是一个可以存储整数变量地址的指针。*用于表明这是一个指针变量。要获取变量的地址,可以使用&运算符。,此时p存储了变量a的地址。可以通过解引用指针来访问它所指向的变量的值。如*p就可以得到a的值。指针是一个变量,其值为另一个变量的地址。

2024-12-10 19:24:12 461

原创 c语言函数小结

定义:在函数或代码块内部定义的变量叫局部变量,其作用域仅限于定义它的函数或代码块。例如在函数int add(int a, int b)中,a和b就是局部变量。存储方式:全局变量存储在静态存储区,程序运行期间一直存在。存储方式:局部变量通常存储在栈区,当函数执行结束或代码块退出时,局部变量所占用的空间会被自动释放。定义:在所有函数外部定义的变量就是全局变量,其作用域从定义点开始直到源文件结束,可被多个函数共享。2. 返回值类型也可以与返回结果类型不一致。3. 返回值也可以不写类型,默认是 int型。

2024-12-09 19:57:28 352

原创 三种排序方法以及二分法

选择排序(Selection Sort)是一种简单的排序算法,其基本思想是在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾,直到所有元素均排序完毕。它的基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后分别对这两部分继续进行排序,以达到整个序列有序。它重复地走访要排序的数列,每次比较相邻的两个元素,如果顺序错误就把它们交换过来,直到没有元素需要交换为止。

2024-12-04 20:24:56 269

原创 数组知识框图以及易错总结

数组名传递:数组作为函数参数时,传递的是数组首地址,在函数内部修改数组元素会影响原数组。例如,void func(int arr[], int n)中,arr实际上是一个指针。,若访问arr[5]就会越界,因为数组下标从0开始,其有效下标范围是0到4。,只有arr[0]被初始化为1,其余元素默认初始化为0。但如果没有进行初始化,数组元素的值是不确定的。字符数组与字符串:定义char str[5] = "abcde"是错误的,因为字符串"abcde"加上末尾的'\0'共6个字符,超出了数组大小。

2024-12-03 19:39:28 222

原创 流程控制小结

while(1)是常见的while死循环写法,因为条件1始终为真,所以循环不会停止,除非在循环体内部使用break等语句来跳出循环。)就是一个典型的for死循环结构。它的条件部分为空,意味着没有终止条件,循环体会一直执行下去。在编程中,死循环是指循环条件永远满足,导致循环体不停地重复执行,无法正常结束的情况。2. while死循环。

2024-11-29 22:28:45 254

原创 【无标题】

注意 :以上循环在执行时除了 do while 中的 while后可加分号,其他皆不可以加分号。根据表达式的值与 case 常量匹配执行相应代码块,可搭配 break 跳出。continue:跳过本次循环体剩余语句,进入下一次循环。3.多分支 if - else if - else。循环开始条件,循环结束条件,使循环趋于结束的操作。先执行一次循环体,再判断条件决定是否继续循环。|| 规定,必须先算前面的式子。短路特性(截断特性)短路特性(截断特性)先判断条件,满足则执行循环体。break:跳出本次循环。

2024-11-28 21:53:00 232

原创 c语言中数据类型

小端序(Little Endian):最低有效字节存储在最低的内存地址,而最高有效字节存储在最高的内存地址。大端序(Big Endian):最高有效字节存储在最低的内存地址,而最低有效字节存储在最高的内存地址。在大端中,存储的顺序为:0x12 0x34 0x56 0x78。在小端中,存储的顺序为:0x78 0x56 0x34 0x12。

2024-11-22 20:31:23 152

空空如也

空空如也

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

TA关注的人

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