- 博客(31)
- 收藏
- 关注
原创 C++之二:类和对象
C语言是面向过程的,关注的是过程,分析求解问题的步骤,调用函数逐步解决问题。C++是面向对象的,关注的是对象,将一件事情的完成分为不同的几个参与者(对象),靠参与者的交互来完成任务。C语言中,结构体只能用来定义变量;在C++中,结构体不仅可以定义变量,还可以定义函数。C++中更常用class来定义类。类体中内容称为类的成员:类的两种定义方式:1、声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2、 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函
2024-12-17 19:39:07
870
原创 C++之一:基础
定义命名空间,需要使用到namespace关键字。int a = 10;int b = 20;命名空间可以嵌套定义。同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
2024-12-16 18:46:50
1023
原创 二叉树OJ题
提到二叉树的递归,我们首相想到的就是二叉树的深度优先遍历(根遍历)。,给定一个先序遍历的字符串序列,要求还原二叉树,并中序遍历该二叉树。:把大问题分解为小问题,小问题在进一步分解,直到不可再分解的子问题。相比于直接返回递归函数的计算,用两个变量存储,减少了重复的计算。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。对二叉树的递归性质做一个更好的补充。如果二叉树每个节点都具有相同的值,那么该二叉树就是。是指该树所有节点的左右子树的高度相差不超过 1。的某个节点和这个节点的所有后代节点。
2024-12-06 19:56:12
992
原创 数据结构之四:堆和二叉树
堆的实现:SData/Heap/heap.c · Hera_Yc/bit_C_学习 - 码云 - 开源中国树:是一个非线性数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树形结构中,子树之间不能有交集,否则就不是树形结构。(树中不能构成回路,不能有孤立的点)。 树的结构定义链式表示: 数组表示:一棵二叉树是结点的一个有限集合,该集合:1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2^(i-1)个结点。
2024-12-05 16:53:23
726
原创 数组和链表OJ题
哨兵位:head = tail = (struct ListNode*)malloc(sizeof(struct ListNode)),这里的head就是哨兵,不存储任何数据,只是在尾插时不需要对list进行判断。哨兵位对尾插来说更加方便,但在绝大多数的oj题中,链表一般是不带哨兵位的,第一个头结点存储的有数据。反转链表(逆置单链表),可以说是链表最关键的操作之一。7、输入一个链表,输出该链表中倒数第k个结点(双指针变形)。(回文链表=链表逆置+链表的中间结点)这里对结点个数不同的链表,
2024-11-29 18:19:03
1016
原创 只出现一次的数字
对于数组[ 1,2,1,6,2,5],可以把它拆分为两个数组[ 1,1,6 ],[ 2,2,5 ],再分别对两个数组进行异或,就可以得出这两个数字。:对于[1,1,2,2,3]数组,3只出现一次。让数组的每次元素异或,即:1^1^2^2^3,根据异或的数学规律得出,上式的结果为3。,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。请你找出并返回那个只出现了一次的元素。
2024-11-27 16:26:03
345
原创 数据结构之一:复杂度
相关代码:SData/test_22/main.c · Hera_Yc/bit_C_学习 - 码云 - 开源中国数据结构:在内存当中存储、组织数据的方式。(顺序表、链表、栈、队列、树等)。算法:与数据结构配合使用,是对数据的处理。(查找、排序、二分查找、动态规划等)。复杂度:用来分析算法的性能,算法的性能分为时间开销和空间占用两个部分。时间复杂度:描述算法中基本操作的执行次数。大O渐进表示法 实际计算中,我们并不一定要精确的计算,只需要大致的执行次数,因此我们这里使用大O渐进表示法。推导
2024-11-22 17:01:23
713
2
原创 C总结测评
设定义有 char* p[] = { "shanghai","Beijing","HongKong" };,则结果j字符的表达式为?这两个结构体在#pragma pack(4)和 #pragma pack(8)的情况下大小分别是?以下程序运行时,若输入1abcdef2df的输出结果是?在上下文和头文件均正常的情况下,以下程序输出正确的是?以下哪个选项可以将flag的第二个bit位置零?下列程序中,z的执行结果是?下列程序c输出的结果是?p[1][2]的值为?该程序输出的是多少?
2024-11-20 19:10:40
555
2
原创 高阶C语言之六:程序环境和预处理
_FILE__ //进行编译的源文件__LINE__ //文件当前行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵守ANSI C,其值为1,否则未定义#define指令可以定义任何语句,但是不同换行,在换行是需要特殊的换行符case;//define语句最好不要加;//在预处理时,define会把;替换到代码中//define 定义的可以时任何语句//甚至可以时一串代码__FILE__,\__LINE__,\
2024-11-18 14:27:48
355
原创 高阶C语言之五:(数据)文件
改造通讯录(可保存信息):本文相关代码:文件:即:硬盘上的文件,文件将数据直接存放在电脑的硬盘上,做到了。在程序设计当中,程序员所说的文件一般分为两种:程序文件、数据文件。
2024-11-17 13:30:01
1402
原创 高阶C语言补充:柔性数组
C99中,结构体中最后一个元素允许时未知大小的数组,这就叫做成员。vs编译器也支持柔性数组。之所以把柔性数组单独列出,是因为:1、柔性数组是建立在结构体的基础上的。2、柔性数组的使用用到了动态内存分配。这使得柔性数组不能单独的放在其他两篇文章当中,因此本文较为剪短,只介绍柔性数组这一个概念。
2024-11-16 20:01:11
486
原创 高阶C语言之四:动态内存管理
指针+结构体+动态内存管理=数据结构动态内存相关代码:栈区、堆区、静态区存储的数据:头文件声明 动态内存指的就是堆区内存,malloc和free都是建立在堆区的基础上的。C语言提供的动态开辟内存的函数:这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。free释放空间C语言提供的动态开辟回收的函数:函数声明:free释放动态开辟的内存。函数声明:calloc开辟内存空间的同时初始化。改变动态内存分配的空间。函数声明:realloc函数会找一
2024-11-14 13:31:20
1206
原创 高阶C语言之三:自定义类型
char y;double z;}s1,s2,s3;//这里的s1,s2都是创建的结构体变量//匿名结构体类型structint num;}s1;//匿名结构体类型只能用一次//定义即便两个匿名结构体的成员变量完全相同,编译器会把这两个声明当成完全不同的两个类型。
2024-11-12 19:17:27
1122
原创 高阶C语言之二:指针进阶
指针数组,是一个数组,是用来存放指针的。//存放整型指针的数组//存放字符型指针的数组数组指针,是一个指针,指向数组的指针。类比:整型指针是用来存放整型的地址。字符指针是用来存放字符的地址。数组指针是用来存放数组的地址。数组指针的创建//p的类型 int(*)[5],步长由int和[5]共同作用// &arr ---> int(*)[5] 步长:4*5=20// arr ---> int* 步长:4*1=4。
2024-11-04 16:00:50
925
原创 进阶C语言之二:一些程序
4.输入一个整数数组,实现一个函数,把奇数放在前半部分,偶数放在后半部分。1.全局变量的默认初始化以及含有不同类型的表达式之间的转换。3.对计算机存储大小端的判断。2.短整型指针指向整型数组。
2024-11-04 14:35:33
139
原创 高阶C语言之一:数据的存储
C语言的内置类型:C语言本身提供的类型。1.整型家族:char、short、int、long。2.浮点型家族:float、double。3.构造类型:数组类型、结构体类型 struct、枚举类型 enum、联合类型 union。4.指针类型:void*、int*等。5.空类型:void类型表示空类型(无)。
2024-10-30 16:36:26
620
原创 进阶C语言之一:指针和结构体
字母大小写转换中使用到scanf的返回值,其中EOF的本质是:指针(进阶)指针地址是内存中一个最小单元的编号,地址也叫指针。 平时所说的指针,其实是指针变量,是用来存放地址的变量。 内存的地址不需要单独存起来,是由硬件直接生成的。指针变量存放的是地址,通过这个地址可以找到一个内存单元。 指针变量的大小与机器的位置有关,32位(X86)机器是4个字节,64位(X64)的机器是8个字节。结论1:结论2:野指针:指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)。在创建
2024-10-23 20:21:28
991
原创 初阶C语言之三:操作符和表达式
整个表达式的结果是最后一个表达式的结果。算数移位:右边丢弃,左边补原符号位。( ) 就是函数操作调用符,操作数是:函数名,函数参数。- 反码(原码的符号位不变,其他位按位取反)如果exp1为真,则exp1。移位的讲解需要用到原码、反码、补码的概念。右移操作符分为:算数移位和逻辑移位两种。逗号表达式,就是用逗号隔开的多个表达式。eg:不创建临时变量实现两个数的交换。复合赋值运算符:产生复合的运算效果。与任何一个数字异或的结果还是该数字。逻辑移位:右边丢弃,左边补0。相同的两个数字异或的结果为0。
2024-10-15 20:24:28
874
原创 初阶C语言之二:数组
数组是一组相同类型元素的集合。C99标准之前,数组的大小必须是常量或常量表达式。C99标准之后,数组的大小可以是变量,为了支持变长数组。1.不完全初始化,剩余元素初始化为0。!!注意ch3和ch4的差别;二维数组的访问也是通过下标进行的。二维数组的行号可以省略,列号不能省略。--->二维数组的每行看作一个元素。二维数组在内存中的存储二维数组在内存中也是连续存放的。
2024-10-13 17:18:14
451
原创 经典递归问题(汉诺塔、青蛙跳阶)
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。(1) 每次只能移动一个盘子;汉诺塔是一个思维过程。
2024-10-08 20:07:03
164
原创 初识C语言之一:简单认识关键字
1. scanf 改为 scanf_s.是VS自己的函数,只有VS自己的编译器认识.(尽可能避免哈!A:C/C++是编译型的语言,是txt.c--->编译--->链接--->txt.exe。C语言是结构化的程序设计语言---->顺序结构\选择结构\循环结构.二进制指令--->汇编指令(助记符)--->B语言--->C语言。计算机中的单位:bit、Byte、KB\MB\GB\TB\PB.C语言的国际标准:ANSI-C:C89、C90、C99等。参数(原材料)--->函数(工厂)----->结果(产品)
2024-09-25 20:06:54
1109
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人