- 博客(54)
- 收藏
- 关注
原创 C++类与对象(上)
类的引入类的定义类的两种定义方式:类的访问限定符及封装访问限定符封装类的作用域类的实例化类对象模型如何计算类对象的大小结构体内存对齐规则:this指针
2024-05-15 17:00:28
973
原创 内联函数+auto关键字(C++11)+指针空指针nullptr(C++11)
内联函数、auto关键字(C++11)、指针空指针nullptr(C++11)详解
2024-05-14 16:00:40
758
原创 数据结构八大常见的排序
常见排序算法分类1.插入排序2.希尔排序(缩小增量排序)3.选择排序4.堆排序5.冒泡排序6.快速排序(递归和非递归)7.归并排序
2024-03-28 20:23:47
1069
原创 数据结构——二叉树
1.树的概念1.1树的概念1.2 树的相关概念树的表示1.4 树在实际中的运用(表示文件系统的目录树结构)2.二叉树概念及结构2.1概念2.3 特殊的二叉树:2.4 二叉树的性质2.5 二叉树的存储结构1. 顺序存储2. 链式存储3.二叉树顺序结构3.1 二叉树的顺序结构3.2 堆的概念及结构3.3 堆的实现4.二叉树链式结构及实现
2024-03-10 12:12:44
2016
原创 二叉树链式结构及实现
数据结构和接口函数新结点的创建和手动创建一个二叉树前序遍历中序遍历后序遍历二叉树的高度二叉树的节点个数二叉树的叶子节点个数二叉树第k层节点个数查找二叉树的某个节点层序遍历判断二叉树是否为完美二叉树
2024-03-10 12:09:59
841
原创 数据结构——Top-k问题
堆这里浅谈topk问题,堆排序,直接建堆法,建k个数的小堆法(空间大小取决于k,具有空间优势),方法二方法三时间复杂度大致一样
2024-03-03 05:53:56
1770
原创 数据结构—循环队列
为了能使下标Qrear = Qfront来区别队空还是队满,我们常常认为以下左图为队空,右图为队满的情况。左图初始空队列状态,我们认为Qrear=Qfront=0,右图此时满队列的状态,Qrear=7,Qfront=0。头删原理就是,自增front,同样在进行头删的时候,因为front的自增,在动态数组a[k]到a[0]之间的过渡也需要对front取值范围的限制。因为这是循环队列,在经过不断的插入删除的过程中,rear和front会不断地变换位置,所以判空条件就是判断他俩是否相等而不是他俩是否都为0。
2024-02-01 16:32:51
672
原创 数据结构链表——单链表
/数据类型//数据//指针}SLTNode;//结构体类型这里结构体数据类型的命名“SLT”为“Sequence List”的缩写 “Data”代表"数据",“Type”代表类型。
2023-08-10 20:13:10
148
原创 数据结构顺序表
尾删看似简单但是有坑,你是不是认为将size自减1就ok了,大体思路是这样的,但是若数组中有3个数据,但是你执行了4次尾删,那么size就会为-1,这时候在对数组进行使用时,就会造成数组越界,所以我们要对size进行限制。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。头删比较简单,只要后从前往后遍历,将后一个元素把前一个元素覆盖就好了。和头删原理相同,但是只要删除就要考虑size的范围,不能使数组越界。
2023-08-03 00:23:31
66
原创 时间复杂度
在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。找到某条基本语句与问题规模N之间的数学表达式,就是算出了该算法的时间复杂度。
2023-07-29 09:41:17
223
原创 C语言实现:找出单身狗问题
所以将原数组所有元素异或,成对的元素异或等于0;那么两个单身狗异或的结果的二进制位中为1的那一位,代表这两个数的那一位不同。2、结合律: a ^ b ^ c = a ^ ( b ^ c )3、对于任何数x,都有: x ^ x = 0,x ^ 0 = x。人家别人都两两在一起,就你自己,那你不是单身狗是啥,哈哈哈哈哈。4、自反性: a ^ b ^ b = a ^ 0 = a。所以我们利用异或原理直接让数组中所有元素相互异或即可。这两个数组中分别有一只单身狗,其余都是成对存在。因为相同的两个数异或等于0,
2023-07-17 17:03:14
128
原创 C语言#define和宏
#define和宏的定义、#和##的应用 使用#把一个宏参数变成对应的字符串;##可以把位于他两边的 符号合成一个符号。宏的副作用;宏和函数的对比
2023-07-16 17:30:48
167
原创 文件的随机读写:fseek;ftell;rewind函数详解
把 fp 指针退回(左)到离文件当前位置 100 字节处;把 fp 指针移动(右)到离文件当前位置 100 字节处;把 fp 指针退回(左)到离文件结尾 100 字节处。把 fp 指针移动(右)到离文件开头 100 字节处;根据文件的指针的位置和偏移量来定位文件指针。让文件指针的位置 回到文件的起始位置。
2023-07-07 14:21:08
114
2
原创 scanf/fscanf/sscanf printf/fprintf/sprintf的对比
sscanf详解;scanf/fscanf/sscanf printf/fprintf/sprintf的对比
2023-07-07 10:54:22
74
3
原创 C语言文件操作
文件的打开方式;fgetc函数;fputc函数;fgets函数;fputs函数;fprintf函数;fscanf函数;二进制读取和写入函数:fread函数fwrite函数;C语言中的三种流标准输入stdin(键盘);标准输出stdout(屏幕);标准错误stderr(屏幕)
2023-07-05 23:27:44
60
原创 关于qsort函数的回调函数与嵌套结构体动态内存的bug
我在实现动态通讯录的时候,按名字排序通讯录信息的时候,我想调用库函数qsort,刚好再复习一下他的使用方式,当时我是自己模拟了与库函数的qsort一样的冒泡排序Bubble然后就出了bug首先这是我创建的结构体int age;} PeoInfo;//动态版 typedef struct Contact {//用指针来指向动态开辟空间的位 int sz;//当前已经存放的信息个数 int capacity;//可存放的最大的容量 } Contact;初始化函数。
2023-07-02 12:55:12
61
2
原创 C/C++程序的内存开辟以及柔性数组
如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。有了这幅图,我们就可以更好的理解在《C语言初识》中讲的static关键字修饰局部变量的例子了。但是被static修饰的变量存放在数据段(静态区),数据段的特点是在上面创建的变量,直到程序。实际上普通的局部变量是在栈区分配空间的,栈区的特点是在上面创建的变量出了作用域就销毁。
2023-07-01 16:30:44
48
原创 动态内存管理
void * malloc(size_t size) //size为要分配的空间大小这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。-返回值的类型是void*,所以maolloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。
2023-06-28 14:58:01
38
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人