暂时未有相关云产品技术能力~
大一本科在读,热爱编程, 热爱敲代码,对新知识有强烈的渴望。
将一面额为10元倍数的整钱(面额为大于等于10,并小于等于100)换成1元、2元和5元的零钱组合(每种面值都要有)。输入要换的面额(如10元),输出所有可能的换法数量(如2种)。
1.字符指针----指向字符的指针 例1:现在p指向的就是字符串“abcdef” 那么能不能更改字符串呢?
1.数组参数和指针参数 例1:一维数组传参 去掉数组名和元素个数,剩下的东西就是数组元素的类型 例2: 二维数组传参
链表:顾名思义,就像一条铁链一样,把每一个铁链的链节点连接起来。 链表的基本结构如下: 链表每个节点的创建 首先,一条铁链,有多个节点,每两个节点之间会连接起来。 那么这些节点是如何创建的呢? —结构体—
1.创建结构体,对象为学生,结构体信息有学号,分数,总分,排名 2.使用函数实现不同的功能 2.1.输入学生的信息:
解决visual studio 对scanf ,strcpy,strcmp等函数的不安全警告报错 可以看到,编译器对scanf进行了报错,原因是说它不安全 编译器自己给了一种解决方案: 使用vs自带的 scanf_s,但是用这个函数,仅仅能够在vs上使用,在其他编译器可能无法使用。
回调函数就是,把一个函数的地址,放在函数指针中,然后将该指针作为一个参数,传到 另一个函数中,在这个函数内部使用了外部写好的一个函数. 举一个例子,看完你一定明白了
1.学习总结 学习c语言已经有100天,从一个初出茅庐的无知青年,敲出第一个hello world 都激动的不行,到现在: 常见的数据类型, 变量的命名方式, 变量的分类 到变量的作用域和生命周期 常量 字符串和转义字符和注释的使用 选择语句 循环语句 函数 数组 操作符 常见的关键字 define定义常量和宏 指针 结构体 初识链表 初识文件管理等等等等 还有个人的重点笔记总结+笔试题精髓笔记
1.数组笔试重点考察 1.1整型数组与sizeof 1.2字符数组与sizeof 1.3sizeof与字符串 1.4strlen与字符串 2.指针笔试重点考察 2.1指针与sizeof 2.2指针与strlen sizeof与整型数组
详解strlen的细节 首先了解strlen 函数的参数 size_t 是什么东西呢?
字符串函数的重点: 文章不长,是为了让你一点点消化所有内容: 在这里插入图片描述
strstr函数:在一个字符串中查找子串 学习新函数时,先去c库查找该函数的相关资料,更加助于你的学习
1.strstok函数的用法 直接看函数的声明: 参数1:要切割的地址,参数2:切割时的标记物 注意:strtok函数本身会记住第一次传过来的这个地址,第一次传过来时:如果这个地址为空,则strtok函数返回一个空指针,如果这个地址不为空,则返回传过来的首地址。 由于这个函数的第二个参数为要切割的标记物,假如这个标记物不存在,返回的也是第一次传进来的要切割的函数的首地址。 下面举例说明:
结构体重点😃 1.结构体内存对齐问题,是在计算结构体的大小时,对结构体成员在内存中的位置进行研究的问题。
什么是位段 位段的详细解释 位段其实也是一种结构体的类型 1.位段的成员是 int ,short int unsigned int , signed int , short , char 类型 2.位段的成员名后有一个冒号和一个数字 看一个例子:
BF 算法 BF 算法精讲 在学习到字符串的匹配问题时,了解到了BF算法和KMP算法。 对比这两个算法,先了解BF算法; 字符串匹配问题,比如说:有一个主串 “abbbcdef” , 子串 “bbc”,该问题就是在主串中查找子串。 肉眼可见,主串中的确存在子串bbc,返回值是子串在主串中第一次出现的首位置下标,也就是返回2. BF
KMP算法核心剖析: 关于KMP算法,建议先了解 BF算法 KMP算法是用来解决字符串匹配问题的高级算法,看完这篇文章,你应该能理解KMP算法。 KMP算法和BF算法唯一的区别在于:主串的i 并不会回退,子串的j也不会回退到0位置。 KMP算法的核心在于求出子串的next数组 所谓的next数组,其实存放的就是子串回退的位置的下标。 下面来演示如何求出一个子串的next 数组 假设有一个字符串:“ababcabcdab”, 求该字符串的next数组: 规定:next[0] = -1 , next[1] = 0 下面就来求next[2] ,next[3]…
柔性数组概念 对于柔性数组,也许你之前从未听说过,柔性数组,顾名思义,就是数组,它的柔性柔在元素个数可以动态变化, 即柔性数组是未知大小的,数组大小可以动态变化的。 在结构体中,最后一个元素允许是未知大小的数组,这个数组就叫柔性数组成员。 下面直接举例子来说明柔性数组。
大小端是什么? 计算机在内存存储中有两中存储模式: 大端字节序存储模式和小端字节序存储模式。 大端存储模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。 小端存储模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
整型提升: 在计算机中,一个数据的类型如果是char 类型,以整型的形式打印该char类型的值时,会自动转换成整型,叫做整型提升。 整型提升的规则: 整型提升是按照变量的数据类型的符号位来提升 举例说明整型提升的存在:
浮点数的存储规则: 根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式: (-1)^S * M * 2^E (-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。 M表示有效数字,大于等于1,小于2。 2^E表示指数位。
test1:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
首先分析代码,a是数组名,是数组首元素地址,&a取到整个数组的地址,+1跳过了整个数组,a强转成int*类型,然后赋值给ptr,此时ptr指向的就是数组a后面的地址,如下图:
当你遇到下图这个错误时,是由于SQLyog在8.0以上版本采用了新的加密方式。
我们知道,strcpy函数是拷贝字符串的,但是它并不能拷贝例如整型,结构体之类的东西,strcpy有一定的局限性,memcpy函数可以说涵盖了所有类型数据的拷贝。
前言 对于一个通讯录管理系统来说,较为重要的是清楚具体需要什么功能以及每一块功能的实现。 下面,实现一个通讯录,该通讯录能够进行联系人的添加,删除,查找,修改,展示,排序,保存,销毁,等功能。 我们知道,一个联系人有以下基本信息:联系人姓名,年龄,性别,电话,住址等。 所以下面来实现功能时,按照每一个功能逐一实现即可。
1.为什么会存在动态内存分配? 我们现在知道的开辟内存方式是创建变量,创建数组。而这些东西是在栈区上开辟空间的,一旦创建完成,是无法更改的,是固定死的。就像数组,在创建数组时,已经指定了数组的大小,编译后无法再更改。 这时候就需要动态内存分配。
test1:请问执行上面代码,会出现什么结果? 解析:运行该段代码时,程序会崩溃 答案:调用Test函数时,在Test函数内部又调用Getmemory函数,即使在Getmemory函数内部申请空间,返回的该空间的起始地址给p,然而p并未返回,str仍为NULL。拷贝 "hello world"到str内部,将会导致程序崩溃。 改正:可以将p申请的空间返回。
1.文件的打开和关闭 1.1 什么是文件指针? 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统 声明的,取名FILE. 假如:我们要操作一个文件,名为text.txt ,首先要打开文件,打开文件的同时,操作系统会自动为该文件创建一个文件信息区,专门用来记录该文件的信息。
1.文件的打开和关闭 1.1 什么是文件指针? 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统 声明的,取名FILE.
1.1fseek函数 根据文件指针的位置和偏移量来定位文件指针。 看不懂没关系,举个例子你就明白了。 我们首先在text.txt文件中放入 “abcdef” 这些字符。
1.程序翻译环境和运行环境 假设一个test.c文件经过编译器编译运行后生成可执行文件test.exe,这中间存在两个过程: 一个是翻译,在这个环境中源代码被转换为可执行的机器指令。 一个是运行,它用于实际执行代码。 在翻译环境阶段,会进行编译和链接操作。 在汇编阶段,是将汇编指令转换成二进制指令。
1.程序翻译环境和运行环境 假设一个test.c文件经过编译器编译运行后生成可执行文件test.exe,这中间存在两个过程: 一个是翻译,在这个环境中源代码被转换为可执行的机器指令。 一个是运行,它用于实际执行代码。 在翻译环境阶段,会进行编译和链接操作。 在汇编阶段,是将汇编指令转换成二进制指令。 1.1程序翻译中的的编译和链接
1.时间复杂度 时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个数学函数,它定量描述了该算法的额外运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为法的时间复杂度。 即:找到某条基本语句与问题规模N之间的数学表达式,就是算出了该算法的时间复杂度。
1. 顺序表的概念: 顺序表其实就是数组的升级版,也就是在数组的基础上,要求数据是连续存储的,并且是从头开始的,不能跳跃间隔。 2.顺序表接口函数实现 3.顺序表的缺陷 一般来说,对顺序表的操作有顺序表的初始化,头插,头删,尾插,尾删,在某个位置插入或删除,查找某个值,还有销毁等功能,下面来逐一实现:
什么是链表 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 通俗地讲,就是一个结构体有两个成员,一个是存放数据的成员,一个是指针成员,通常的单链表是第一个节点的指针成员存着下一个节点的地址,下一个节点的指针成员又存下一个节点的地址,这样每个节点之间连接起来,就叫做链表。 本文主要讲的是链表中的一种重要的形式:单链表。
以下题目均为IO型。 1.给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
1. 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。 如果链表中存在环 ,则返回 true 。 否则,返回 false 。
在链表中有八大形式,如下图:其中,最为重要的两种结构为最简单的单向不带头不循环链表和双向带头循环链表。 单链表前面的文章已经介绍过,本篇文章重点介绍双向带头循环链表。 带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。 另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了。
学习完c语言,需要对所学知识进行一个检测,下面有一套笔试题, 你有四十分钟进行检测,每道题五分,严格要求自己打分。 根据作者原话:在没有何提示的情况下,如果能得满分,那你可以扔掉本书了,因为你的水平已经大大超过了作者;如果能得80分以上,说明你的C语言基础还不错,学习本书可能会比较轻松;如果得分在50分以下,也不要气馁,努力学习就行了;如果不小心得了10分以下,那就得给自己敲敲警钟了;如果不幸得了0分,那实在是不应该,因为毕竟很多题是很简单的。
学习完c语言,需要对所学知识进行一个检测,下面有一套笔试题, 你有四十分钟进行检测,每道题五分,严格要求自己打分。 根据作者原话:在没有何提示的情况下,如果能得满分,那你可以扔掉本书了,因为你的水平已经大大超过了作者;如果能得80分以上,说明你的C语言基础还不错,学习本书可能会比较轻松;如果得分在50分以下,也不要气馁,努力学习就行了;如果不小心得了10分以下,那就得给自己敲敲警钟了;如果不幸得了0分,那实在是不应该,因为毕竟很多题是很简单的
1.函数的调用方式 相信你对调用函数一点都不陌生,但是在调用函数的过程中,却存在着很多你无法见到的东西,这是底层信息,想要理解透彻,就得深入底层去观察。 本文以一个最简单的加法函数为例,深入讲解内存空间中的每一条指令。
1.函数的调用方式 相信你对调用函数一点都不陌生,但是在调用函数的过程中,却存在着很多你无法见到的东西,这是底层信息,想要理解透彻,就得深入底层去观察。 本文以一个最简单的加法函数为例,深入讲解内存空间中的每一条指令。
栈是什么,栈的特点 数据结构中有一种特殊的线性表叫栈。 栈有一种特点: 它允许后进入的数据先拿出来。 类似一个弹夹,或是一个装砖头的容器。
一.什么是队列,队列的特点 队列是数据结构中的一种特殊的线性表,它与栈不同,队列的基本图例如上图: 显然,队列的特点就是: 先进先出 First In First Out 那么我们使用什么样的方式来实现队列呢? 基于队列的特点,使用链表而不是数组来实现队列是比较合适的 使用数组来实现队列的缺点: 出队时需要挪动数据,效率不高。 使用链表来实现队列的优点:入队出队效率高,不需要挪动数据。
一.环形队列的定义及其特点 循环队列是一种线性数据结构,其操作依然是先进先出原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 特点: 对于一个普通队列来说,每出队一次,头指针就必须往后移一位,这样使用过的空间就无法再重复使用,(头指针无法回移),即使队列元素小于队列大小,也无济于事,造成空间的浪费。 而对于循环队列来说,可以重复利用使用过的空间。解决了普通队列的问题。 基于循环队列的特点:我们可以使用数组或者循环链表来实现循环队列。 使用数组实现的话,尾指针到数组的大小时,回溯到头位置即可。
前言 本文章主要介绍栈和队列的相互转换。 使用两个队列实现栈 我们知道,栈的特点是后进先出,而队列的特点是先进先出。 栈的特点:
一、栈和队列的基本特点 栈的特点是后进先出,而队列的特点是先进先出。 使用两个栈实现队列,必须具备队列的先进先出的功能。
一、列表及其使用 1.列表的特点 1.列表类似于数组,有下标。 从左到右开始的话,下标是从0开始的,从右到左的话,下标是从-1开始的。 2.列表的元素可以是任意类型的,而数组的元素只能是同一种类型的元素。 3.下标的使用不能超过元素的数量,否则会报错。 2. 列表的使用方法 1)查找某元素在列表中的位置
一、重排链表 思路1. 1.使用一个线性表,存储链表中的每个节点,然后按照题目的条件,来链接线性表的各个节点即可