- 博客(58)
- 资源 (1)
- 收藏
- 关注
原创 数据结构(5)——栈
栈是一种常见的数据结构,其主要作用是存储和管理数据。栈遵循先进后出(FILO)的原则,即最后入栈的元素最先出栈。栈通常用于临时存储数据、函数调用和表达式求值等场景。一、//动态栈int top;//下标}ST;动态栈的结构体定义就是以上,一个块内有一个数据域,然后定义一个下标,用来实现后续的操作,还有当前数组的容量,后续可以对其实现更新。数据类型用typedef来定义。这篇文章很详细地介绍了栈的概念、结构以及实现,同时提供了栈的各种操作函数的代码实现。
2025-04-02 16:44:53
807
原创 ERROR: AddressSanitizer: SEGV on unknown address 0x5030020fe36c...LeetCode报错
这可能就是导致错误的原因。比如,当第一次进入内部的while循环时,sum已经足够大,这时候left的值可能是一个很大的数,导致数组访问越界,或者在sum -= nums[left++]的时候出现负数索引或者超过数组长度的索引,从而引发运行时错误,比如段错误或者访问越界异常。这里总结了一下,一般出现这一堆东西都是要么是数组越界,要么就是地址错误。这里就是left没有被正确初始化。这段代码是一个滑动窗口的题。
2025-03-31 21:09:00
376
原创 数据结构(4)——带哨兵位循环双向链表
前面我们学习了单链表的一些知识,由单链表引申出双向链表,同时带哨兵位或者不带哨兵位是两种,但大差不差,这里学习一下带哨兵位的循环双向链表。其实有很多链表的结构,组成它们的也就是循环非循环,带哨兵位不带哨兵位,双向还是单向。一、带哨兵的循环双向链表是什么无哨兵单向非循环链表:结构简单,也就是我们常说的单链表,一般不会用来单独存数据,实际中更多是作为其它数据的子结构,如哈希桶,图的邻接表等等。而带哨兵双向循环链表。
2025-03-29 15:36:41
970
原创 Linux学习——Linux基本命令(1)
在这里我使用的是腾讯云的云服务器,系统是CentOS 7.6 ,基于云服务器学习还是很方便的,现在也有许多免费试用的活动,可以进行学习。一、Linux操作的特点特点就是纯命令行,但是Linux也有图形化界面,很多都是有图形化界面。但是大多数在以后的工作中都是通过远程连接的形式来实现,所以一定需要掌握Linux的命令行操作。Windos也是命令行,但是大多数都是图形化界面,其实以前都是命令行,后期才有的图形化界面。现在的许多产品依旧是支持命令行,支持Linux指令。无论是图形化还是指令,本质都是一样的。
2025-03-22 08:50:11
796
原创 LeetCodeBug-member access within null pointer of type ‘struct ListNode‘
可能是因为当我们调用节点的next时,它并不知道该节点是否为空,所以我们要先判断该节点是否为空后在对该节点的next进行操作。记录一下这个Bug的解决办法,我是在这里出现bug的。的问题,经过网上的搜索和一堆见解,我自己总结了一下。应该属于逻辑的问题,当我们调换后发现可以通过了。这里利用快慢指针解决问题,但是出现了。
2025-02-18 12:29:32
291
原创 数据结构(3)——单链表
我们之前学过了顺序表,认识到本身就是一段连续的储存地址构成的空间,可以不断通过动态分配内存构成空间,而链表在空间上与它不同。一、链表的概念和结构为什么要写一个这样的函数,因为我们后续的实现,包括插入,删除,查找什么的都可能会需要这一段代码,为了防止复用,所以就直接自己封装一个函数代码,以后调用就方便多了。//定义一个首节点return;//对首节点初始化。
2025-02-17 12:29:09
871
原创 C++学习——缺省参数、重载函数、引用
缺省参数的含义很好理解,重载函数是一个很有意思的用法,对比C语言有了很大的改变。我们之前在C语言中学过指针,一个*对应着一个&,分别是解引用和取地址,那么在C++里也有一个类似的但是它只有一个&,通过这种用法这里就不是取地址的意思了,而是引用的意思,而且比较方便容易使用。int& b;return 0;这里要是不初始化的话就会报错。1、基本任何场景都可以用引用传参。引用作为参数就是为了提升效率,针对两种情况最适合用引用来作为参数,第一个是大对象,第二个是深度拷贝对象。深度拷贝是指在拷贝对象时,不仅要复制对象
2025-02-06 22:07:45
909
原创 数据结构(2)——线性表与顺序表实现
今天对顺序表进行学习,可以把它了解成一个连续的表,类似数组。一、线性表线性表(linear list)是N个具有相同特性的数据元素的有限数列。线性表是一种在实际中广泛使用的数据结构,常见的线性表有:顺序表、链表、队列、字符串等等。顺序表这里实现增删改查,分别实现的功能有初始化,头删,头插,尾删,尾插,修改,查元素。我们开始实现:
2025-02-03 21:28:58
1028
原创 数据结构(1)——算法时间复杂度与空间复杂度
数据结构”是计算机程序设计的重要理论技术基础,它不仅是计算机的核心课程,而且已成为其它理工专业的热门选修课。——《数据结构C语言版》严蔚敏一、算法1.1算法是什么?首先,我们总能听见算法算法的,到最后一问你算法是什么?你支支吾吾的回答说不就是一些计算的方式吗?难不成还有其它解释方法。对此,在严蔚敏算法(algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或者多个操作。
2025-02-01 18:04:56
1239
2
原创 C++学习——认识和与C的区别
开启新的篇章,这里进行对C++的学习,本篇文章知识简单介绍一下C++,一点知识,以及和C的区别。我们之前学过C语言,知道C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂一些的问题,需要高度的抽象和建模的时候,C语言不合适。所以C++就出现了。C++(c plus plus)是一种计算机高级程序设计语言,由C语言扩展升级而产生,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型。
2025-01-27 21:31:46
1465
原创 C语言教程——文件处理(2)
昨天最顺序读写函数了解了四个,今天接着学习。一、顺序读写函数(续)提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
2025-01-25 20:24:04
1179
原创 C语言教程——文件处理(1)
我们知道电脑上有许许多多的文件,但为什么数据要用文件来储存呢?为什么要使用文件呢?且待我细细道来。一、为什么使用文件我们知道,我们写的程序什么的数据什么的都存在文件中,倘若没有存在文件中,那么它们就存在了电脑的内存中,而且如果程序退出的话,内存就会进行回收,我们的数据就也回收了,也就丢失了,等到程序再次运行,是看不见上次程序的数据的,如果将数据进行持久化的保存,我们就可以使用文件。磁盘(硬盘)上的文件是文件。文件是计算机中的一种数据存储形式,用来存储和组织数据的集合。
2025-01-23 20:43:32
876
原创 C语言教程——动态内存管理(2)
我们之前学了动态内存管理分配函数,也是熟悉了动态内存分配函数,基于动态内存分配我把之前的通讯录做了修改,上传到了gitee上,这篇文章接着学习动态内存管理。一、柔性数组1.1柔性数组的概念柔性数组是一种特殊的数组,它的大小在运行时才确定,可以根据需求动态调整数组的大小。柔性数组(flexible array)这个概念,但是它是确实存在的。C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组的成员。char b;char arr[];
2025-01-22 21:10:34
636
原创 C语言教程——动态内存管理
我们前面听过什么动态内存管理,但是为什么要有动态内存管理呢?假设我们申请一个整形空间,它只能申请4个字节,或者申请一块连续的数组空间,一旦申请好了,就不可以修改了,所以有局限性,这时候就可以通过动态内存管理,当我们用的空间不够的时候可以变长,多了的时候可以变小。主要介绍了动态内存分配的函数的使用以及注意事项,记住有申请就一定要释放。
2025-01-20 21:15:42
754
1
原创 C语言教程——自定义函数类型(2)
我们前面学完了结构体,特殊结构体,以及对结构体的内存的计算方法,接着再进行学习。一、位段位段(bitfield)是一种数据结构,用于将多个相关的位字段(bitfield)打包在一个或多个字节中。在C语言中,可以使用位段来声明位字段。位段的声明方式与结构体类似,但是有两个不同:1.位段的成员必须是int、unsignedint、或signedint。(这里补充一下,经过测试char也基本没有什么问题)2.位段的成员名后面有一个冒号和一个数字(基本都是同类型的放在一个位段类型中)structA{
2025-01-19 19:04:57
1020
原创 基于C语言的通讯录实现
学完结构体后,我们可以通过学过的知识自己来制作一个通讯录。我们在学校中难免会接触到什么什么大作业,什么什么系统,这些都大同小异,这里带着大家进行通讯录的实现。一、要实现的功能1.顾名思义,通讯录中要有人的信息,包括:姓名,年龄,性别,地址,电话2.通讯录中可以存放的人很多(这里按照可以放100个来实现)4.增加联系人5.删除指定联系人6.查找指定联系人的信息7.修改指定联系人的信息8.显示所有联系人的信息等等等还可以对名字或者年龄进行排序,后续自己想要加什么功能可以自己加。
2025-01-18 22:09:27
1036
原创 C语言教程——自定义函数类型(1)
我们前一篇学完字符串类的函数后,这篇开始进行自定义类型的学习。自定义类型主要进行了解和学习的有结构体、枚举、联合。有了结构体类型,那么定义变量就十分简单了。intx;chary[20];}s1;//全局变量//全局变量intmain()//局部变量return0;这里s1和s2就是全局变量,s3是局部变量。通过结构体类型就可以创建变量。我们如何初始化呢?intx;chary[20];
2025-01-17 20:46:52
1056
原创 C语言教程——字符串和内存函数(2)
上一篇文章介绍了几种string.h里函数的使用和注意事项,包括它们的模拟函数的编写,用自己的喜欢的方法来编写,正常情况下用库函数里的直接调用就可以,我们今天接着上一篇进行学习,接着讲解函数,之后再学习内存函数和结构体。这里介绍了一些可以对其它类型操作的函数,但也是string.h库函数里的,通过这些函数可以达到意想不到的效果。
2025-01-16 17:49:59
637
原创 C语言教程——字符串和内存函数(1)
本篇文章介绍一系列的用的比较频繁的字符函数和字符串函数内存函数。一、字符串函数介绍这三个函数长度是不受限制的,一直到‘ \0 ’所以会出现不安全的。所以出现了长度受限的函数。strncpystrncatstrncmp各自出现了一个参数,也就是多了一个限定条件。这篇讲了一些函数的用法和注意事项,下一篇接着进行学习。
2025-01-15 14:57:09
619
原创 C语言教程——指针进阶(2)
我们接着上一篇的函数指针往下学习。一、函数指针数组1.1函数指针数组写法//字符指针数组//整形指针数组那么我们就可以想一想函数指针数组是否可以呢?第一行 是一个函数指针,我们将my_strlen这个函数的地址赋予给它,当我们想要把前面的函数指针改成函数指针就可以在里面加上数组元素个数,其实就是在这个函数指针后面加上一个方括号再确定元素个数就可以了。我们去掉数组名和元素,剩下的就是一个函数指针,所以就是这个数组里面存放的就是这个函数的地址。
2025-01-10 17:01:53
867
原创 C语言教程——指针进阶(1)
我们在之前知道指针就是一个变量,用来存放地址,地址唯一标识一块内存空间,指针的大小是固定的,32位平台是4个字节,64位是8个字节,指针还是有类型的,指针的类型决定了指针的+ - 整数的步长,指针解引用操作的时候的权限。指针还是有运算的,指针加减整数,指针减去指针,指针的关系运算,忘了的可以去之前的文章复习一下。C语言教程——指针初阶,接下来学习字符指针,指针数组,&数组名VS数组名,数组指针的使用,数组参数、指针参数,一级指针传参,二级指针传参,函数指针
2025-01-09 21:52:15
601
原创 C语言教程——数据在内存中的存储
本篇文章开始进行对之前学过的知识进行深入的了解和学习,在之前的基础上补充并且加深记忆,通过代码以及讲解弄懂。一、数据类型的介绍之前的文章也了解过基本的数据类型。已经学过的有以下基本的内置类型:char //字符数据类型short //短整型int //整形long //长整型long long //更长整形。
2025-01-08 17:44:47
1042
原创 如何写出写出一手优秀的代码
优秀的代码不仅代表你的实力,同时也代表着你的书写风格的好坏。通过这个就可以判断你写的东西是否真正的符合他人的需要和团队的默契的配合。1、代码运行正常,实现基本的运行,能够跑起来2、Bug很少3、效率比较高4、可维护性高5、注释清晰6、文档齐全。
2025-01-01 12:45:35
205
原创 C语言教程——调试程序基本操作技巧
调试对于程序员来说是非常重要的,如果一个程序员只会写bug,那么就就没有人来修bug了。我们写出bug的时候,可以通过自己调试从而实现修改。我们知道以前的计算机非常的大,对计算机出现问题的时候唯一的解决办法就是进入计算机进行检查。bug原意本来为昆虫的意思,1947年9月9日,葛丽丝·霍普(Grace Hopper)发现了第一个电脑上的bug。当在Mark II计算机上工作时,整个团队都搞不清楚为什么电脑不能正常运作了。经过大家的深度挖掘,发现原来是一只飞蛾意外飞入了一台电脑内部而引起的故障(如图所示)。
2024-11-22 19:35:46
961
1
原创 C语言教程——结构体
这里这篇文章来讲解结构体,结构体是很重要的一个章节,后续的数据结构以及一些算法都需要结构体这个知识。本篇文章先对结构体进行浅显的了解,后续会进行深入的学习。本篇文章是可以使用结构体以及用结构体去访问成员等等。int money;}s1;//直接定义//单独定义可以在声明的时候直接进行变量的定义,也可以单独去定义。结构体的声明其实也可以在主函数里面写,但是如果想要其它的任何地方都能够使用它,那么还是放在主函数外面合适。int money;
2024-11-14 17:32:22
868
原创 C语言教程——指针初阶(2)
本篇文章接着对指针进行初步的学习,接着上一篇文章来进行学习和讲解分析。这里初阶指针就了解和分析完事了,后续还会进行指针的讲解,这里先了解和学一个大概,也许还有许多疏漏,大家可以上网上多查查,多找找,下一篇开始就讲解结构体。
2024-11-12 18:45:53
672
原创 C语言教程——指针初阶(1)
本篇文章开始讲解新章节指针,后续还会对指针进行深入讲解和学习,希望大家以及我可以准确掌握指针的使用。这里讲了大部分指针的理解和运用,之后还会继续讲解,指针就一个字-香。
2024-11-10 19:18:13
648
原创 C语言教程——操作符详解(2)
这里接着上一篇的文章内容接着学习和讲解,基本上本篇就把操作符这一部分全部讲解完毕。这里我们接着再讲一下sizeof和数组之间的关系和使用方法。这就是所有操作符的讲解和分析。
2024-11-05 21:06:12
980
原创 C语言教程——操作符详解(1)
今天从开始讲解每个操作符的介绍,这里我有一个建议,关于操作符,我们可以不用硬背,我们可以通过敲代码,敲几次就自然而然就记住了。!逻辑反操作负值正值取地址sizeof操作数的类型长度(以字节为单位)对一个数的二进制按位取反--前置、后置--++前置、后置++间接访问操作符(解引用操作符)(类型)强制类型转换a+1;这个有两个操作数,所以是双目操作符。今天介绍了关于单目操作符的使用和方法,以及一些要注意的地方,后续将会继续讲解其中的一些需要注意的地方。
2024-11-03 15:58:18
689
原创 扫雷(C语言)
本篇文章基于前面的学习内容,有一些部分与前一篇的三子棋一样,可能会比较快,但是写逻辑的和游戏实现的时候会详细讲解,来动手写一个简单的扫雷。我们首先在game.h里定义行和列,以及多两行和多两列的定义。之后再test.c中包含一下这个头文件,这样这里的定义的行和列就可以使用了。接下来首先定义两个数组,一个是mine数组作为还没有进行排查的时候,并且里面布置好了雷的信息,接下来在定义一个排查出雷的信息,命名为show,将两个数组进行初始化。扫雷游戏: C语言版本扫雷游戏 (gitee.com)
2024-10-31 21:11:13
3184
7
原创 数组实例之三子棋的实现(C语言)
我们理解并知道了数组等一些知识的使用后就可以适当进行自己的一些创作,本篇文章基于数组学习之后的实例练习,教你如何写一个三子棋的简单小游戏。环境依然是基于VS2022的集成开发环境,项目创建可以参考之前的文章—创建空项目。要保证之前知识的连贯性,这样学着才比较轻松,只要把逻辑想明白,实现就很好实现了。
2024-10-27 16:11:22
1079
6
原创 C语言教程——数组(2)
我们知道一维数组是连续存放的,随着数组下标的增长,地址是由低到高依次存放的,二维数组,也是在内存里面是连续存放的,而且要检查数组是否越界。数组名实际上就是一个地址,传入参数就相当于传入的是数组的首元素的地址,当用到取地址+数组名的时候才是整个数组。
2024-10-26 15:54:02
1010
3
原创 C语言教程——数组(1)
本篇文章开启数组的学习。1、数组是使用下标来访问的,下标是从0开始的。2、数组的大小可以通过计算得到本篇文章讲解了一维数组和二维数组的初始化以及使用,还有一些储存的方式,个人感觉数组还是非常重要的,大家可以多多练习。
2024-10-23 16:10:43
794
原创 C语言教程(函数)—函数栈帧的创建和销毁
这里补充一下函数线帧的创建和销毁,我们知道函数调用一次就会占用一次栈内存。每一次函数调用都会为本次函数调用分配内存空间(是在内存的栈区),为本次函数调用分配的内存空间叫做被称为这次函数调用的栈帧空间,函数栈帧的创建和销毁。编译器越高级,那么 就越不容易发现在函数调用的过程中线帧的创建,具体细节取决于编译器的实现。新的编译器由于考虑各种各样的问题,所以封装的更加复杂,不容易分离出来函数栈帧创建的过程。栈空间的使用是从高地址向地地址增长。
2024-10-20 22:50:47
1037
1
原创 C语言教程——函数(3)
接着补充递归有关知识,这篇文章就把函数部分讲解完毕。这里函数都讲完毕了,函数还是非常实用的,同时递归也很方便,但是要注意栈溢出的问题,出现栈溢出问题,需要考虑用非递归算法,或者将栈区变量换成静态区变量(尽管这里没有大作用)。
2024-10-17 21:57:20
591
原创 C语言教程——函数(2)
我们之前了解了函数的基本原理和基本写法,现在就可以适当的写一些简单的小程序,勤加练习才会有好的结果。1、告诉编译器有一个函数叫做什么,参数是什么,返回类型是什么,但是具体是不是存在,函数声明决定不了。2、函数的声明一般出现在函数的使用之前,要满足先声明后使用。3、函数的声明一般要放在头文件中的。函数的声明和变量的声明非常的形似。声明的时候把函数返回类型参数,类型,以及函数名写出来就行。函数的定义是指函数的具体体现,交代函数的功能实现。递-递推归-回归。
2024-10-16 09:37:37
900
原创 C语言教程——函数(1)
函数的出现,为程序员解决了大量问题,同时这里也是每个程序员必须要会的地方,希望可以熟练掌握其内容和用法。如果函数能干所有的事情,那么还需要程序员干什么?库里面的函数有一定的局限性,有的话程序员就没事干了,程序员所以要做大量的自定义函数,所有更加重要的是自定义函数,自定义函数和库函数一样,有函数名,返回值和函数参数。statement;//语句项ret_type 返回类型fun_name 函数名paral 函数参数所有的函数基本组成大概和上述代码一样。
2024-10-12 23:46:12
1056
原创 C语言教程——分支和循环语句(2)
我们今天,接着讲解循环语句,需要多加练习才可以更加的牛continue在循环中是跳过本次循环执行下一次循环,或者说就是跳过某一次代码中后面的代码。而break则是终止循环中所有的代码,及时下一次循环没有执行,也直接跳出循环(终止循环)。以上就是今天要讲的内容,本文讲解了循环语句的有关使用。
2024-10-04 23:21:11
779
3
原创 C语言教程——分支和循环(1)
分支合循环首先就是要有良好的代码风格,缩进得当,要不然真的很乱很不好理解,而且容易出现错误。在练习代码的时候或者平时写代码的时候还是要注意代码风格的问题。在进行学习本篇之前要先了解一下语句的概念C语言语句可以分为以下五类:1.表达式语句2.函数调用语句3.控制语句4.复合语句5.空语句本次学习的就是控制语句。控制语句用于控制程序的执行流程,以实现程序的各种结构方式,(C语言支持三种结构:顺序结构,选择结构,循环结构),他们由特定的语句定义符组成,C语言共有九种控制语句。
2024-10-02 00:53:56
803
空空如也
计算机系关于大一给一些有价值性的建议(语言-c .python)
2023-11-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人