C语言
文章平均质量分 77
蓝乐
这个作者很懒,什么都没留下…
展开
-
【C++】C++入门
书接上回,在介绍了函数重载后,我们将继续学习包括引用和函数内联等C++入门知识。C++入门一.函数重载的补充extern "C"二.引用1.引用的概念2.引用的特性一.函数重载的补充extern “C”extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。//引入extern "C" 是告诉编译器其修饰下的函数的命名修饰规则按照C语言下的命名规则进行//即此时的函数Add在转化到符号表原创 2021-10-05 18:57:11 · 348 阅读 · 6 评论 -
【C++】初识C++
初识C++一.C++关键字二.命名空间1.命名空间定义2.命名空间的使用三.C++的输入输出四.缺省参数1.缺省参数的概念2.缺省参数的分类全缺省参数半缺省参数五.函数重载学习完C语言后,便开始认识C++了。C++是在C语言的基础上发展出来的,因此C语言中的所有内容均可在C++上运行。同时C++也进行了许多优化,实现了很多C语言无法实现的功能,下面让我们来慢慢认识C++这一门编程语言。一.C++关键字首先是C++的关键字,C++总计63个关键字,其中包含C语言的32个关键字。对于C++的关键字,我们并原创 2021-09-26 10:31:08 · 339 阅读 · 8 评论 -
【数据结构】排序(三)
排序一.归并排序前面我们已经了解了排序中的插入排序,选择排序已经交换排序。本篇文章将介绍剩下的归并排序和非比较排序中的计数排序,同时介绍各种排序算法的稳定性,并对排序进行一下总结。一.归并排序...原创 2021-09-23 16:25:06 · 348 阅读 · 3 评论 -
【数据结构】排序(二)
排序三.交换排序1.冒泡排序概念及分析算法分析小结2.快速排序概念算法分析与实现1.hoare版本在认识了插入排序和选择排序后,我们再来了解一下剩下的交换排序和归并排序。三.交换排序1.冒泡排序概念及分析冒泡排序,顾名思义,每趟将待排序数组中的最大值冒到序列的最后一个位置,当进行n - 1趟后,序列便成了升序。算法分析冒泡排序总共需要冒n - 1趟,每趟比较n减去已经比较好的数的个数再减1,即n - 1 - i次比较,若相邻两数前者比后者大,则二者交换,因此冒泡排序的代码为:void B原创 2021-09-19 23:36:11 · 115 阅读 · 2 评论 -
【数据结构】排序(一)
排序排序的概念常见的几种排序算法插入排序直接插入排序概念及分析算法实现小结希尔排序概念及分析算法实现小结排序的概念所谓排序,即是将一串数据,按照某个或某些关键字的大小,按照递增或递减的顺序排列的操作。常见的几种排序算法本篇文章将介绍插入排序和选择排序。插入排序插入排序的思想其实在日常生活中就有体现,比如我们平时打扑克牌时,一般会将所发的牌按照顺序插入到已经有序的牌中,这便是插入排序了其基本思想即为将待排序的记录按其关键值的大小插入到一个已经有序的序列当中,直到所有的记录插入完为止,得到一个新原创 2021-09-16 22:18:45 · 290 阅读 · 1 评论 -
【C语言】动态内存分配
目录动态内存分配存在的原因动态内存函数1. malloc 和 free动态内存分配存在的原因首先我们知道内存开辟的方式有:int a = 0;//在栈上开辟4个字节的空间char ch[10] = {0};//在栈上开辟10个字节的连续空间上述的两种方式有两个特点:1)空间开辟的大小是固定的2)数组在声明时需要明确其大小,即数组长度,其内存在编译时分配。但是在实际应用中我们所需要的不止是一个固定大小的数组,而常常需要堆数组的长度进行修改,而数组在编译时开辟空间的方式就不能满足我们的需求了,原创 2021-09-07 11:00:44 · 162 阅读 · 0 评论 -
【数据结构】队列的实现与简单应用
队列队列的概念及结构队列的实现队列的链式结构队列的基本操作队列的简单应用队列的概念及结构队列:只能在一端插入数据,另一端删除数据的特殊线性表,队列具有先进先出FIFO(First In First Out)的特性。入队:进行插入操作的一端称为队尾。出队:进行删除操作的一端成为队头。队列的实现作为线性结构,队列同样可以用顺序表和链表的结构实现,但是使用链表的结构会更优一些,这是因为队列需要不断的进行头插的操作,如果使用数组的话会大大增加操作的时间复杂度,从而使效率降低。队列的链式结构实现队原创 2021-08-24 18:21:03 · 620 阅读 · 0 评论 -
【数据结构】栈的实现与简单应用
栈栈的概念常见术语栈的实现栈的定义栈的应用括号匹配问题:栈作为线性结构中的一种,与线性表其实并无太大区别,无非就是在线性表的基础上加了一个限制罢了,那么,本篇文章将从栈的实现和一个简单的应用来介绍栈。栈的概念栈是一种特殊的线性表,其只能在固定的一端进行插入和删除操作,这是栈顶,而另一端叫栈底。栈的数据元素遵循LIFO即后进先出(Last In First Out )的规则。常见术语压栈/入栈/进栈:栈的插入操作,只能在栈顶进行。出栈:栈的删除操作,也只能在栈顶进行。栈的实现作为一种特殊的线原创 2021-08-21 21:34:35 · 823 阅读 · 0 评论 -
【C语言】枚举与联合(共用体)
目录枚举枚举类型的定义枚举的优点枚举的使用枚举类型的大小联合(共用体)联合类型的定义联合的特点联合大小的计算总结枚举顾名思义就是一一列举,把可能的取值一一列举。比如现实生活中:一周从星期一到星期日共七天,可以一一列举;性别有男,女,保密,可以一一列举;月份有十二个月,也可以一一列举。枚举类型的定义enum Day{ Mon, Tues, Wes, Thur, Fri, Sat, Sun};enum Sex{ MALE, FEMALE, SECRET};以上定原创 2021-06-20 17:35:43 · 148 阅读 · 1 评论 -
【C语言】结构体
目录结构体枚举联合原创 2021-06-20 16:46:36 · 866 阅读 · 7 评论 -
【C语言】内存操作函数
目录简述memcpy--内存拷贝函数memmove--处理内存有重叠部分的拷贝函数简述本文将介绍几个关于内存操作常见的库函数,即memcpy,memmove,memcmp以及memset函数。memcpy–内存拷贝函数void * memcpy ( void * destination, const void * source, size_t num );memcpy函数和之前所介绍的strcpy函数类似,只是这次拷贝的内容不是字符串,而是各种类型的内存,因此对于memcpy的num参数代表的内原创 2021-06-14 10:26:47 · 212 阅读 · 2 评论 -
【C语言】常见字符串库函数的使用与实现
目录字符串有关库函数介绍及使用简述1.strlen的使用及实现2.strcmp的使用及实现3.strcpy的使用及实现4.strcat的使用及实现5.strstr的使用及实现6.strncat的使用及实现7.strncmp的使用及实现8.strncpy的使用及实现9.strtok的使用字符串有关库函数介绍及使用简述1.strlen的使用及实现2.strcmp的使用及实现3.strcpy的使用及实现4.strcat的使用及实现5.strstr的使用及实现6.strncat的使用及实现7.s原创 2021-06-08 23:07:43 · 520 阅读 · 3 评论 -
【C语言】整型在内存中的存储
目录数据类型介绍整型整型在内存中的存储大小端介绍代码实现判断当前机器的字节序【总结】数据类型介绍C语言中的类型有整形,浮点型,构造类型,指针类型和空类型。类型的意义主要有两点:1.决定了使用这个类型所开辟内存的大小(大小决定了使用范围)。2.决定了如何看待内存空间的视角整型char:unsigned charsigned charint:unsigned intsigned intshort:unsigned short (int)signed short (int)long原创 2021-05-21 23:59:13 · 1558 阅读 · 8 评论 -
【C语言】逆置字符串
题目:将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I牛客网链接这题可以通过三步翻转法来解决,即先将字符串整体逆置,再对逆置后的字符串中每一个单词部分进行逆置。比如例子中的 I like beijing.第一步,字符串整体逆置,得到:.gnijieb ekil I第二步,将字符串中每一个单词逆置,得到:beijing. like I这里字符串操作的实现非常关键,故单独实现一个函数进行字符串的逆置,由于每个单词的长度不一,因此原创 2021-05-18 22:53:46 · 2636 阅读 · 0 评论 -
【C语言】位运算的应用
二进制运算在日常生活中并不常见,但在C语言编程中是不可避免的,二进制位运算中有&(按位与),|(按位或),^(按位异或)等等,下面用一个例题来结束位运算的一个应用。题目:二进制中1的个数。写一个函数返回参数二进制中 1 的个数。比如: 15 0000 1111 4 个 1牛客网的OJ链接一看见这个题目时,我们可以类比十进制中获取每一位的方法,即循环%10,/10,对于二进制,则循环%2,/2。但是这种方法有局限性,就是不能处理负数,因为负数在计算器中的二进制是以补码的形式存原创 2021-05-17 23:19:13 · 300 阅读 · 0 评论 -
【数据结构】栈
文章目录一,栈1.基本概念(1)定义:只允许在一端进行插入或删除操作的线性表。(2)重要术语一,栈1.基本概念(1)定义:只允许在一端进行插入或删除操作的线性表。(2)重要术语栈顶:允许插入和删除的一端栈底:不允许插入和删除的一端...原创 2021-05-01 13:22:27 · 140 阅读 · 0 评论 -
【C语言】简易游戏设计--扫雷
扫雷游戏想必各位都不陌生,今天我将用C语言代码实现简易版的扫雷游戏。目录函数封装测试用源文件:test.c菜单显示游戏实现函数封装源文件:game.c头文件:game.h函数封装测试用源文件:test.c菜单显示为了方便玩家选择,首先设计一个menu函数来提示,代码实现很简单:void menu(){ printf("############################\n"); printf("###### 1.game ######\n"); printf("##原创 2021-04-30 08:57:19 · 1058 阅读 · 3 评论 -
【C语言】简易三子棋设计
三子棋想必大家都不陌生,甚至和小伙伴玩了不知道多少遍,我也不例外。特别是以前电子产品不普及的时候,那个时候那张纸,画个井字,就可以和小伙伴玩了。那么今天我将来介绍一下如何用C语言设计简易的三子棋游戏。(我们规定玩家的棋子为’*’,电脑的棋子为’#’)首先进入游戏,我们需要设计一个菜单内容,大概是下面这个样子:用四个printf函数即可实现void menu(){ printf("#######################\n"); printf("#### 1.play原创 2021-04-24 19:32:32 · 1015 阅读 · 6 评论 -
【数据结构】线性表
一,线性表1.基本概念a.定义:线性表是具有相同数据类型的n个数据元素的有限序列***,其中n位表长,当n=0是线性表是一个空表。b.几个概念:·ai是线性表中的“第i个”元素线性表中的位序(注意:位序从1开始,数组下标从0开始)。·a1是表头元素*;an是表尾元素。·除第一个元素外,每个元素有且仅有一个前驱;除最后一个元素外,每个元素有且仅有一个后继。2.基本操作InitList(&L):初始化表。构造一个空的线性表L,分配内存空间DestroyList(&L):销毁操原创 2021-04-21 17:53:06 · 496 阅读 · 4 评论 -
【C语言】汉诺塔问题
汉诺塔是一个非常经典的问题,其背后是一个传说故事:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。抽象为数学问题就是:有三根相邻的柱子,标号为a原创 2021-04-18 12:28:56 · 3501 阅读 · 8 评论 -
【数据结构】算法与时间复杂度,空间复杂度
这次来介绍算法,时间复杂度和空间复杂度。算法是程序设计的核心,那么何为算法,我们以下面这张图来大致感受一下实现算法可以用文字,代码或伪代码,需要注意的是实现一个好算法的前提。算法概念不是特别重要,接下来介绍相对更重要的内容–时间复杂度。我们再以一张图来理解时间复杂度举个例子int main(){ int tmp = 0; int positive = 0; int negative = 0; int n=0; scanf("%d",&n);原创 2021-04-13 12:31:56 · 159 阅读 · 1 评论 -
串的模式匹配--KMP算法
刚学完数据结构中串的内容,捣鼓了两天,总算是弄明白了串的模式匹配中的KMP算法,所谓的KMP算法,就是当用于匹配的串中出现重复的字符时,通过一个next数组记录重复的信息,再在匹配中跳过这些已经比较过的重复信息。那么next数组时什么东西,应该怎么求呢?不妨规定next[0]=-1,next[j]表示t[j]前有多少个与开头字符相同的字符,其他情况下next[j]=0。以t串"aaab"为例,求出t串对应的next数组next[j]=-1说明模式串前没有任何可以加速匹配的信息,下一趟应从t串的开头即j=原创 2021-04-04 23:35:57 · 1172 阅读 · 2 评论 -
pow函数的实现
求一个数x的n次方,最直接的方法就是循环,代码如下:double myPow(double x, int n){double ret=x;if(n==0)return 1;if(n>0){for(int i=0;i<n-1;i++)x*=ret;}if(n<0){for(int i=0;i>=n;i–)x*=1/ret;}return x;}但是这种方法的时间复杂度是o(n),当n非常大时,时间开销会很大,比如计算1^2115453134154时,原创 2021-04-01 22:38:26 · 1732 阅读 · 0 评论