一.前言从这篇文章开始,C语言的学习就结束了,接下来将会开启数据结构与算法的学习。早期,计算机刚被发明出来,内存空间并不是很大,所以不仅追求程序运行时的时间效率,还追求空间效率,但发展到今天,已经不太追求空间效率了,时间效率的追求是不变的。下面就让我们一起学习时间复杂度和空间复杂度是什么吧~二.时间复杂度1.概念1.时间复杂度是一个函数(注意这不是编程语言里 ......
172
0
0
2024-04-30
一.代码运行是的两种环境1.翻译环境,在这个环境中源代码被转换为可执行的机器指令。 2.执行环境,它用于实际执行代码下面主要讲解翻译环境。二.翻译环境从.c 文件到 .exe 文件需要经过编译器的翻译,而翻译又分为 编译和链接两个部分编译又分为三个部分: 1.预编译:又叫预处理,在这个部分主要完成头文件的包含,#define的替换,注释的删除; 2.编译:主 ......
215
0
0
2024-04-30
一.文件指针1.缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”; 2.每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等);3.这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE。下面是在 vs2013编译环境提供的 stdio.h 头文件中有以下 ......
154
0
0
2024-04-30
一.malloc 与 free1.malloc函数声明:1.参数size_t: 要开辟的内存块的大小,以字节为单位; 如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。2.返回值:该函数返回一个指针 ,指向已分配大小的内存;如果请求失败,则返回 NULL; 所以在使用完这个函数后要判断是否成功开辟,即返回值是否是NULL; 因为返回 ......
136
0
0
2024-04-30
一.通讯录思路1.创建结构体类型,其中包含通讯录中联系人的信息; 该信息可以包括:姓名,年龄,性别,电话,地址等;2.创建一个结构体存储通讯录;3.写一个简易的菜单来表明通讯录的功能; 包括但不限于: 添加add,删除del,查找search,修改modigy,排序sort,打印通讯录print等;4.通过函数来实现这些功能;二.三个文件的建立对于较复杂的一 ......
164
0
0
2024-04-30
一.memcpy1.功能拷贝内存块,将字节数的值从源指向的位置直接复制到目标指向的内存块。2.库函数定义3.实例代码语言:javascript复制/* memcpy example */ #include <stdio.h> #include <string.h> struct { char name[40]; ......
155
0
0
2024-04-30
前言在之前的文章里,我们进行了模板初阶的学习( 【C++】泛型编程——模板初阶),了解了什么是泛型编程,学习了函数模板和类模板。 那这篇文章,我们继续学习模板进阶的内容的学习。1. 模板参数的分类首先我们来回顾一下:我们在模板初阶的学习中,定义模板参数是怎么定义的? 是不是使用class或者typename关键字啊, template<class T1 ......
156
0
0
2024-04-30
这篇文章我们来做几道stack相关的OJ题,练习一下stack的使用。1. 最小栈先来看第一道题——:最小栈题目要求我们设计一个MinStack 类:除了提供常见的几个接口之外,还要搞一个int getMin(),使得我们能够在常数时间O(1)内获取到栈中最小的元素。思路分析那要怎么做呢?大家想这样行不行: 我们定义一个变量min来保存最小值,向栈里面入第一 ......
156
0
0
2024-04-30
一.strlen1.功能计算字符串长度,直到遇到 '\0' ;2.模拟实现我们是仿照库函数的方式模拟的,所以先来看看strlen 再库函数里是如何定义的;这个函数很简单,所以直接上代码:代码语言:javascript复制unsigned my_strlen(const char* str) { assert(str); unsigned count ......
154
0
0
2024-04-30
前言反向迭代器的使用相信大家都已经比较熟悉了,那我们这篇文章具体讲什么呢? 🆗,这篇文章我们重点来讲一下反向迭代器的模拟实现。 那为什么我们之前不和正向迭代器放在一块讲呢?为什么要等到我们讲完了容器适配器再来讲反向迭代器的模拟实现呢? 那这个问题我相信学完这篇文章大家就明白了。1. list 的反向迭代器模拟实现首先我们来回看一下我们之前模拟实现list的代 ......
150
0
0
2024-04-30
T1.代码语言:javascript复制int main() { int a[5] = { 1, 2, 3, 4, 5 }; int *ptr = (int *)(&a + 1); printf( "%d,%d", *(a + 1), *(ptr - 1)); return 0; } //程序的结果是什么 ......
139
0
0
2024-04-30
🐲一.关于 strlen 函数与数组、指针的综合笔试题🐋T1.代码语言:javascript复制 //字符数组 char arr[] = {'a','b','c','d','e','f'}; 1. printf("%d\n", strlen(arr)); 2. printf("%d\n", strlen(arr+0)) ......
135
0
0
2024-04-30
这篇文章我们接着上一篇的内容,再来学一个STL里的容器适配器——priority_queue(优先级队列)1. priority_queue的介绍和使用1.1 priority_queue的介绍我们上一篇文章学了queue(队列),那优先级队列也是在<queue>里面的:和queue一样,priority_queue也是一个容器适配器,那他和qu ......
144
0
0
2024-04-30
一.彻底明白 sizeof 操作符 ,数组名,strlen 函数1.数组名的意义 1. sizeof ( 数组名 ),这里的数组名表示的是整个数组 ,计算的是整个数组的大小; 2.&数组名 ,取出的是整个数组的地址,虽然与数组首元素地址的值相同,但意义却完全不同; 3.除此之外的其他所有情况数组名都表示数组首元素的地址。2. sizeof 详解 1. ......
141
0
0
2024-04-30
1. stack的介绍及使用1.1 stack的介绍stack的文档介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器是使用特定容器类的封装对象作为其基础容器的类,提供一组特定的成员函数来访问其元素。元素从特定容器的“背面”(称为堆栈顶部)推 ......
133
0
0
2024-04-30