C语言
文章平均质量分 89
学习C语言
Coca1cole
~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构】开卷数据结构?--堆的实现超详解
前言本章主要讲解数据结构中的堆的知识以及实现堆的概念和结构概念:将所有元素按完全二叉树的顺序存储方式存储在一个一维数组中并以一定的数据要求存储如果所有父节点的数据大于最大子节点的数据,称为大堆;如果所有父节点的数据小于最小子节点的数据,称为小堆将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆性质: 堆中某个节点的值总是不大于或不小于其父节点的值堆总是一棵完全二叉树注:在上节基础知识讲解中我们知道父节点和子节点图示:堆的实现.原创 2021-11-17 10:43:37 · 1493 阅读 · 48 评论 -
开卷数据结构?!单链表实现超详解~
前言本章我们将主要讲解单链表及其实现为什么此前我们已经讲解实现了循序表,原创 2021-10-24 08:13:41 · 761 阅读 · 42 评论 -
【数据结构】树和二叉树的基础知识
前言本章主要讲解:数据结构中的树及二叉树的相关知识树概念及结构 概念:树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的注意:有一个特殊的结点,称为根结点,根节点没有前驱结点 其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<=i<= m)又是一棵结构与树类似的子树每棵子树的根结点有且只有一个前驱,原创 2021-11-12 07:58:17 · 1235 阅读 · 30 评论 -
【数据结构】-图解八大排序(思路+实现+总结)
八大排序详解一、前言二、排序概念及应用1、概念2、排序应用三、排序算法接口展示四、插入排序1、直接插入排序2、希尔排序五、选择排序1、直接选择排序2、堆排序六、交换排序1、冒泡排序2、快速排序一、前言本章主要讲解:八大排序的基本知识及其实现注:这里的八大排序指直接插入,希尔,选择,堆排,冒泡,快排,归并,计数八大排序汇总图:二、排序概念及应用1、概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作稳定性:假设在原序列中原创 2021-12-16 09:09:37 · 1909 阅读 · 27 评论 -
【数据结构】关于二叉树你不得不会的操作--实现链式二叉树超详解
前言本章将讲解二叉树的各种接口实现注:这里我们不会像之前数据结构那样去学习二叉树的增删查改,二叉树不是一个线性结构,并不适合用来储存数据,也就是增删查改并不适合它,这里我们主要是在它本身的性质上拓展链式二叉树二叉树...原创 2021-11-25 08:34:46 · 1377 阅读 · 54 评论 -
开卷数据结构?时间和空间复杂度你可得把握住!!不行就让叔来~
目录一二三一二三原创 2021-10-18 19:39:33 · 1160 阅读 · 72 评论 -
【数据结构】学了数据结构还不会堆排序?--堆排序超详解
前言在数据结构中我们学了堆的性质及其实现,而这里我们将讲解用堆来实现排序背景对给定数组进行堆排序,排成升序排序策略首先将给定数组建立成一个大堆数组如何建大堆数组这里我们想到的是对数据向下调整在逻辑结构上根位置和数据较小的子位置比较,不符合大堆则交换,直到符合然而对数据使用向下调整的前提是,根的左右子堆都符合大堆所以我们从最后一个数据的根位置开始进行调整成堆,直到堆顶数据调整完毕过程示图:对当前堆顶的数据与堆尾的数据交换交换后将除...原创 2021-11-23 08:35:46 · 936 阅读 · 40 评论 -
【数据结构】开卷数据结构~栈和队列详解
前言栈概念及结构 栈,一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作进行数据插入和删除操作的一端称为栈顶,另一端称为栈底栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则数据处理方式:压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶出栈:栈的删除操作叫做出栈,出数据也在栈顶图示:栈的实现栈的实现一般可以使用数组或者链表实现相对而言数组的结构实现更优一些(数组在尾上插入数据的代价比较小)...原创 2021-11-01 11:31:52 · 3683 阅读 · 39 评论 -
【数据结构】用堆解决Top-K问题
目录背景处理策略堆源码(C)背景生活中我们每每都会遇到Top-K问题,例如搜索附近前几的的奶茶店,频率前几的搜索字符串等等如果只是数据比较少的,我们可以排序找到前几的数据但是实际应用中我们时常都会面对海量的数据,大到内存无法全部加载,这就需要我们用数据结构中的堆来解决处理策略首先我们知道:对于大堆,堆顶的数据一定是堆里面数据中最大的;对于小堆,堆顶的数据一定是堆里面数据中最小的对于找最大前k:利用小根堆维护一个大小为K的数组,目前该小根堆中的元...原创 2021-11-21 08:41:14 · 1413 阅读 · 47 评论 -
【数据结构】顺序表实现超详解(保姆级教程)
目录前言顺序表接口实现各项功能接口详解顺序表初始化顺序表释放顺序表展示顺序表容量检查顺序表数据尾插顺序表数据头插顺序表数据前删顺序表数据尾删顺序表数据查找顺序表指定位置插入数据顺序表指定位置删除数据前言本章主要讲解:顺序表以及顺序表的接口实现注:保姆级教程,相信你一定会的~顺序表顺序表是线性标的一种概念:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储...原创 2021-10-15 20:36:07 · 3083 阅读 · 96 评论 -
【数据结构】排序特辑:归并外排序(基础)
前言本章主要讲解:归并外排序的操作以及实现(C语言)注:本章需要用到文件操作的知识,如果有问题,可以先浏览学习一下文件操作的知识:⭐️ C语言进阶 ⭐️ 文件操作超详解【 建议关注+收藏 】外排序背景 一般提到排序都是指内排序,比如快速排序,堆排序,归并排序等。所谓内排序就是可以在内存中完成的排序,内存的访问速度大约是磁盘的25万倍,如果可以的话在内存中排序是非常快的。但对于大量数据来说,数据太大而无法全部都将数据加载到内存中,这时候就需要外排序。概念 外排序..原创 2021-11-30 08:20:52 · 1688 阅读 · 40 评论 -
【数据结构】链表最强结构-带头双向循环链表(超详解)
目录前言写在前面的话链表类型区别带头+双向+循环链表增删查改实现接口展示构建节点类型创建链表及初始化节点开辟链表摧毁链表打印链表尾插链表尾删链表头插链表头删链表查找链表pos位置前插链表pos删除总结前言本章将带你们走进带头双向循环链表的实现与讲解写在前面的话在前一章我们学习实现了单链表(无头单向不循环链表),这里我们引入带头双向循环链表很明显这两种结构截然不同,但都是作为链表最常使用链表结构...原创 2021-10-28 08:28:39 · 2129 阅读 · 43 评论 -
⭐️ 关键字深度剖析 ⭐️第四章(分支和循环关键字)
目录什么是语句什么是表达式基本语法if语句充当注释什么是语句C语言中由一个分号;隔开的就是一条语句。 比如printf("hehe");1+2;什么是表达式C语言中,用各种操作符把变量连起来,形成有意义的式子,就叫做表达式操作符:+,-,*,/,%,>,<,=,==..基本语法语法结构://1if(表达式) 语句;//2if(表达式)语句1;else语句2;//3. 多分支if(表达式1)原创 2021-08-01 15:32:32 · 529 阅读 · 0 评论 -
⭐️ 关键字深度剖析 ⭐️第三章(关键字sizeof\signed\unsigned&原反补\数据范围)
在开头先小小说一下数据类型命名进入正题Sizeof1.用来确定一种类型对应在开辟空间的时候的大小2.不要将sizeof误认为函数,其实并不然。sizeof是操作符,关键字3.sizeof对内置字符和自定义数组是可求的Signed、unsigned 关键字在理解signed、unsigned 关键字之前还涉及另一个知识点原反补计算机中的有符号数有三种表示方法,即原码、反码和补码。 三种表示方法均有符号位和数值位两符号位都是...原创 2021-07-27 15:01:58 · 496 阅读 · 0 评论 -
⭐️ 关键字深度剖析 ⭐️第七章(关键字volatile\struct\union\enum\typedef)
目录前言关键字 - volatile关于const与volatile关键字-struct空结构体多大struct的内存对齐柔性数组struct与class的区别关键字-unionunion和大小端关键字-enumenum 与 #define 的区别关键字-typedeftypedef 与 #define的区别前言本章节主要讲解:深入关键字volatile 深入关键字struct 深入关键字union 深入关键字enum 深入关键原创 2021-08-21 17:48:37 · 1527 阅读 · 6 评论 -
⭐️ 关键字深度剖析 ⭐️第五章(深入C语言三种类型(float/bool/指针)与“零值“的比较)
浮点数的存储浮点数在内存中存储,并不想我们想的是完整存储的在十进制转化成为二进制,是有可能有精度损失的注意这里的损失,不是一味的减少了,还有可能增多浮点数本身存储的时候,在计算不尽的时候,会“四舍五入”或者其他策略int main(){double x = 3.6;printf("%.50f\n", x);system("pause");return 0;}int main() { double x = 1.0; double y = 0..原创 2021-08-01 16:52:27 · 913 阅读 · 1 评论 -
⭐️ 关键字深度剖析 ⭐️第一章(变量&关键字auto/register)
变量为什么定义变量?计算机是用来计算的,计算就需要数据,并不是所有数据要立马计算,因此,变量将有需要的数据保存起来,等待进一步处理。变量定义的本质首先我们要知道程序运行要加载到内存中,程序计算需要数据。而变量定义既是在内存中开辟一个空间,来保存数据(程序运行时已经在内存中加载了)定义与声明定义:开辟空间(有且只有一次)声明:告知(可以多次)变量的分类作用域:指变量可以被正常访问的代码区域(就像代码的影响范围)局部变量:本代码块有效(“{ }”括起来的区..原创 2021-07-23 11:57:25 · 637 阅读 · 1 评论 -
⭐️ 关键字深度剖析 ⭐️第六章(关键字void\return\const)
关键字-voidvoid avoid不能定义变量示例:int main() { void a; return 0;}////在vs2013和Centos 7,gcc 4.8.5下都不能编译通过解释:定义变量的本质:开辟空间 void作为空类型,理论上是不应该开辟空间的,即使开了空间,也仅仅作为一个占位符看待 所以无法作为正常变量使用,故不能定义变量void修饰函数返回值和参数void用来作为函数返回值:void show(){原创 2021-08-20 16:07:17 · 634 阅读 · 6 评论 -
⭐️ 关键字深度剖析 ⭐️第二章(多文件\数据类型&关键字extern/static)
认识多文件首先我们知道:1. 全局变量,是可以跨文件,被访问的。 2. 全局函数,是可以跨文件,被访问的。 而跨文件使用需要声明,例如extern为什么要有头文件?编码项目可能需要多个源文件(毕竟一个人完成整个项目比较麻烦,分多个源文件,模块化实现项目),而头文件使组织项目易于管理维护。解决方案:#pragma once//.h:我们称之为头文件,一般包含函数声明,变量声明,宏定义,头文件等内容(header) //.c...原创 2021-07-24 19:53:49 · 454 阅读 · 0 评论 -
C语言通讯录(静态&动态&文件操作/内附源码)
前言本章主要讲解如何用C语言实现简易版通讯录注:手把手教学,实操性非常强!!!原创 2021-09-28 08:34:14 · 1945 阅读 · 71 评论 -
C语言进阶-程序环境和预处理
前言本章主要讲解点:代码编译链接变成可执行程序程序的过程程序的翻译环境和执行环境任何一个代码从源文件(.c文件)到可执行文件(.exe文件)都经历了两个环境:翻译环境:在这个环境中源代码被转换为可执行的机器指令执行环境:用于实际执行代码图示:编译+链接编译:组成一个程序的每个源文件(.c文件)通过编译过程分别转换成目标代码(.obj文件)链接:每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序(.exe文件)链接原创 2021-10-09 14:52:57 · 2473 阅读 · 73 评论 -
C语言进阶-文件操作超详解
前言本章主要讲解:掌握C语言的文件操作和使用为什么使用文件 在前篇文章中我们写了通讯录,拥有文件操作功能的通讯录可以让数据持久化即在通讯录下一次运行时,在通讯录中我们之前所录入的数据依然存在,只有当我们主动删除数据时数据才不存在注:使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化什么是文件磁盘上的文件是文件在程序设计中,从文件功能的角度来分类文件有两种:程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可原创 2021-10-05 08:01:58 · 6719 阅读 · 55 评论 -
C语言进阶-动态内存管理/柔性数组
动态内存管理的使用即注意事项有关于动态内存管理的寄到笔试题讲解柔性数组的使用为什么存在动态内存分配一般的开辟空间方式://在栈空间上开辟四个字节//在栈空间上开辟10个字节的连续空间特点:空间开辟大小是固定的(数组申明必须指定数组的长度,它所需要的内存在编译时分配)但有时候我们需要的空间大小在程序运行的时候才能知道, 那数组的编译时开辟空间的方式就不能满足了,由此动态内存开辟就来了动态内存函数的介绍。原创 2021-10-01 08:36:30 · 1635 阅读 · 91 评论 -
C语言进阶-自定义类型:结构体/位段/枚举/联合
目录前言结构体struct结构体的声明结构的自引用结构体变量的定义和初始化空结构体大小结构体内存对齐修改默认对齐数宏offsetof结构体传参柔性数组struct与class的区别位段什么是位段位段的内存分配位段的跨平台问题枚举enum枚举类型的定义枚举的优点enum 与 #define 的区别联合union联合类型的定义联合的特点union和大小端联合大小的计算前言本章主要讲解重点:深入掌握原创 2021-09-25 08:03:43 · 2479 阅读 · 79 评论 -
C语言进阶-字符串函数与内存函数
前言本章主要讲解:字符和字符串的库函数的使用和注意事项求字符串长度strlen长度不受限制的字符串函数strcpy strcat strcmp长度受限制的字符串函数strncpy strncat strncmp字符串查找strstr strtok错误信息报告strerror字符操作内存操作函数memcpy memmove memset memcmp写在前面的话:C语言本身是没有字符串类型的字符串通常放在常量字符串(不做修改)中或者字符数原创 2021-09-21 10:48:10 · 2136 阅读 · 82 评论 -
⭐️ 指针笔试题 ⭐️搞懂指针必备!
默认在32位平台上一维数组int a[] = {1,2,3,4};printf("%d\n",sizeof(a));//sizeof(a)中的a表示整个数组,求整个数组空间大小即为16,单位字节printf("%d\n",sizeof(a+0));//a并不是单独的,这时候a表示数组首元素地址,地址在32位平台即为4字节printf("%d\n",sizeof(*a));//aa表示数组首元素地址,解引用为首元素,是int类型,即是4字节printf("%d\n",sizeof(a+原创 2021-08-17 21:14:44 · 543 阅读 · 6 评论 -
C语言进阶-回调函数
前言本文主要讲解 回调函数的理解 回调实现计算器 qsort各种功能的使用 冒泡排序各种功能的实现回调函数定义回调函数就是一个通过函数指针调用的函数如果你把函数的指针(地址)作为参数传递给另一 个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应示例1:回调型计算器#define _CRT_SECURE_NO_WARNINGS#i原创 2021-08-15 22:59:29 · 657 阅读 · 1 评论 -
C语言进阶-高阶指针
前言对于初阶指针内容在我的另一篇文章中已经写到(有想法的可以去看看)附上链接https://blog.youkuaiyun.com/CS_z_jun/article/details/119464791?spm=1001.2014.3001.5501回顾:1. 指针是地址,指针变量是用来存放地址的变量(唯一标识一块内存空间)2. 指针的大小是固定的4/8个字节(32位平台/64位平台)3. 指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限(空间大小)4. 指针-指针为相隔...原创 2021-08-12 23:37:32 · 1168 阅读 · 6 评论 -
C语言进阶-数据在内存中的存储
前言本文主要讲解点数据类型详细介绍 整形在内存中的存储:原码、反码、补码 大小端字节序介绍及判断 浮点型在内存中的存储解析数据类型C语言基本的内置类型char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数//C语言有没有字符串类型? 有字符串,没有字符串类型类型的意义使用这个类型开辟内存空间的大小(大小决定了使用范围) 如何看原创 2021-08-10 11:44:46 · 716 阅读 · 1 评论 -
C语言符号-取余\取模运算
目录前言取整向0取整向-∞取整向+∞取整四舍五入取整汇总取模\余对于正数取模对于负数取模取余和取模的理解前言本文主要讲解并真正理解取余\取模运算是怎样的!取整首先取整有四种类型:向0取整 向-∞取整 向+∞取整 四舍五入取整向0取整示例:int main() { //本质是向0取整 int i = -2.9; int j = 2.9; printf("%d\n", i); //结原创 2021-08-22 22:23:44 · 7691 阅读 · 13 评论 -
C语言内功的修炼--函数栈帧创建和销毁
目录什么是栈帧什么是栈栈帧的创建与销毁main函数调用过程Add函数的调用过程什么是栈帧简单地说程序的执行过程可看作连续的函数调用,而C语言中,每个栈帧对应着一个未运行完的函数每个函数的每次调用(通常使用堆栈实现),都有它自己独立的一个栈帧这个栈帧中保存了该函数的返回地址和局部变量维持着所需要的各种信息所以栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构从逻辑来看栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到.原创 2021-08-07 17:07:54 · 998 阅读 · 3 评论 -
如何深入掌握C语言操作符及表达式求值(详解)
目录前言操作符算术操作符移位操作符左移操作符移位规则右移操作符移位规则大小的变化位操作符一道有意思的例题异或(^)的特点赋值操作符复合赋值符使用举例单目操作符对于sizeof操作符对于++/--操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员[ ] 下标引用操作符 操作数( ) 函数调用操作符.访问一个结构的成员C语言运算符优先级前言本文章主要讲解点:各种操作符的介...原创 2021-08-05 22:05:07 · 1173 阅读 · 4 评论 -
如何深入掌握C语言指针(详解)
目录前言指针是什么概念单元大小与编址指针和指针类型指针类型指针+-整数指针的解引用野指针指针未初始化指针越界访问指针指向的空间释放如何规避野指针指针运算指针+-整数指针-指针指针的关系运算对于指针比较指针和数组二级指针使用及运算指针数组前言本文主要讲解点指针是什么 指针和指针类型 野指针 指针运算 指针和数组 二级指针 指针数组指针是什么概念专业地说:指针(Pointer原创 2021-08-07 00:31:22 · 1208 阅读 · 5 评论 -
如何深入掌握C语言结构体(详解)
内存首先不得不提内存。内存好比是电脑的储存空间,一个空间单元代表着一个字节(byte)。一个字符char,就要1字节(8比特)。如何产生地址?计算机我们分为32位和64位。以32位为例。32位即32根地址线,一个地址线的通断电表示1/0。32个都为0,则表示0;全为1则表示2^32-1(二进制);以此这样相当于每个空间中都有着不同的编号,也相当于该空间的地址。2^32byte(一个空间一个字节)换算出来为4gb打印地址注意:数组名称是地址(..原创 2021-07-26 00:37:22 · 504 阅读 · 1 评论 -
如何用C语言快速实现初级版扫雷(步骤详细)
前言https://www.saolei123.com/附上扫雷小游戏链接,先来体味感受下真正的扫雷是怎样的本文章为手把手讲解实现C语言扫雷(好好看,相信不会太难的说)当你自己完成后一定成就感幸福感满满的!!问题描述用C语言实现小游戏扫雷初级版(9x9棋盘/10个地雷)工具vs2019基本思路和流程扫雷的规则尽快找出雷区中的所有不是地雷的方块根据点击格子出现的数字找出所有非雷格子同时避免踩雷,踩到一个雷即全盘皆输代码实现思路1.菜单选择开始或者原创 2021-07-30 22:54:45 · 1166 阅读 · 3 评论 -
关于大小端和数据的存取及范围问题
大小端数据在内存的存入有大小端之分如何理解吃鸡蛋:对于吃鸡蛋从大的一端还是小的一端这件事情,没有一定的合理说法不通电脑硬件厂商的选择不同注意无论如何放,以同条件去取,都可以!基本概念记忆:小小小(成为小端),其他的是大端如何影响数据存储大小端存储方案本质是数据和空间按照字节为单位的一种映射关系注:并不影响用户使用一个字节是不考虑大小端的!如何存取以小端为例总结1.先看大小端...原创 2021-07-31 19:31:08 · 552 阅读 · 0 评论 -
如何用C语言快速实现三子棋(步骤详细)
前言检验学习成果最好的方式是实践在学习完C语言的函数和数组以后,就可以简易的实现一些小游戏本文章为手把手讲解实现C语言三子棋(好好看,相信不会太难的说)当你自己完成后一定成就感幸福感满满的!!问题描述用C语言实现小游戏三子棋工具vs2019基本思路和流程三子棋的规则在3X3的棋盘里,率先将三个棋子连成一条直线则胜出代码实现思路1.菜单界面:选择开始或者退出游戏2.初始化棋盘并打印棋盘3.玩家选择落子坐标4.电脑实现落子5.每次..原创 2021-07-28 14:18:36 · 1423 阅读 · 3 评论 -
如何深入掌握C语言递归函数(详解)
什么是递归递归就是一个函数在它的函数体内调用它自身来解决问题,实现将大事化小,复杂化简单两个基本要素递归关系执行递归函数,满足递归关系将反复调用其自身,每调用一次就进入新的一层(类似递推的感觉)结束条件如果函数一直递推,每递推一次就会开辟一个空间,而内存是有限的就需要一个限制条件,当无法满足继续递归时,就开始返回(回归)注:因为开辟空间,返回时调用函数中的变量依然会保持使用,以此实现反向输出得到想要的结果递归的精髓在于通过不断地重复逼近一个最终的结...原创 2021-07-29 23:33:22 · 994 阅读 · 2 评论 -
如何深入掌握C语言函数
库函数(C语言自带)举几个栗子:strcpy(复制)提个问题:为什么复制成了完全替换,而不是仅替换对应的空间长度的内容?首先我们得明白在arr2“hello”的结尾后面是结束标志“\0”他仅是结束标志不作为内容,但复制的同时也将它带上了。效果就是目标空间的“hello”后有个“\0”代表结束,后面的内容不会被读出,也就相当于“完全替换”。memset(内容指定)注意:使用库函数必须包含相应的#include头文件自定义函数...原创 2021-07-26 12:14:03 · 436 阅读 · 0 评论 -
如何深入掌握C语言数组(详解)
1. 一维数组数组是构造数据类型之一数组是一组相同类型元素的集合数组:有序数据的集合,用数组名标识 元素:属同一数据类型,用数组名和下标确定1.1 创建数组的创建方式:type_t arr_name [const_n];//type_t 是指数组的元素类型//const_n 是一个常量表达式,用来指定数组的大小数组创建的实例://代码1int arr1[10];//代码2int count = 10;int arr2[count]...原创 2021-08-02 23:06:07 · 653 阅读 · 0 评论
分享