C语言
文章平均质量分 69
C语言
Hiland.
山有木兮木有枝,心悦君兮君不知。
展开
-
数据初阶之堆(二叉树的顺序结构及实现)
如果结果不如你所愿,就在尘埃落定前奋力一搏原创 2022-05-08 16:20:24 · 1941 阅读 · 0 评论 -
数据结构初阶之二叉树——概念篇
就算有一天,离别的时刻来临,但那也不一定意味着永别。原创 2022-05-08 11:23:17 · 3190 阅读 · 0 评论 -
数据结构初阶之队列(C语言实现)
没有翅膀的我们,只是随便被认为不能飞而已原创 2022-05-01 14:16:32 · 3450 阅读 · 0 评论 -
数据结构初阶之栈(C语言实现)
1. 概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈。入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。进栈如下:出栈如下:注:内存中的栈和数据结构中的栈没有关系 ,一个是数据结构里的,一个是操作系统中内存划分的一个区域,叫做栈,用来函数调用时建立栈帧。原创 2022-04-26 08:25:48 · 3398 阅读 · 0 评论 -
顺序表和链表的区别
不同点 顺序表 链表 存储空间 物理上一定连续 逻辑上连续,但物理上不一定连续 随机访问 支持O(1) 不支持:O(N) 任意位置插入或者删除元素 可能需要搬移元素,效率低O(N) 只需修改指针指向 插入 动态顺序表,空间不够时需要扩容 没有容量的概念 应用场景 元素高效存储+频繁访问 任意位置插入和删除频繁 缓存利用率 高 低 由上表可总结出:顺序表优点:1. 物理空间是连续的,方便用原创 2022-04-25 15:11:50 · 3989 阅读 · 0 评论 -
数据结构初阶之双向循环链表(C语言实现)
将要实现的接口://创建结点LTNode* BuyListNode(LTDateType x);//初始化LTNode* ListInit();//尾插void ListPushBack(LTNode* phead, LTDateType x);//尾删void ListPopBack(LTNode* phead);//打印void ListPrint(LTNode* phead);//头插void ListPushFront(LTNode* phead, LTDate原创 2022-04-24 14:24:24 · 4006 阅读 · 0 评论 -
数据结构初阶之单链表(C语言实现)
虽然顺序具有方便下标随机访问(因为是连续物理空间)的优点,但是也具有一定的缺陷,如:1. 插入数据,空间不足时要扩容,但是扩容有性能消耗2. 头部或者中间位置插入删除数据,需要挪动数据,效率比较低3. 空间扩容太大,可能存在一定空间占用,浪费空间,不能按需申请和释放空间由于这些缺陷,链表诞生了那么链表是什么?概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。从上图可看出:1. 链式结构在逻辑上是连续的,原创 2022-04-14 15:30:03 · 4822 阅读 · 0 评论 -
数据结构初阶之顺序表数组OJ题三——合并两个有序数组
题目链接:https://leetcode-cn.com/problems/merge-sorted-array解题思路:三指针先创建三个指针,一个指针 i 指向nums1的m-1处,一个指针 j 指向nums2的n-1处,一个指针dest指向nums1的m+n-1处,然后让 i 与 j 比较,将较大的往dest处放...原创 2022-04-12 18:34:42 · 5114 阅读 · 0 评论 -
数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项
题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array解题方法:双指针原创 2022-04-12 18:05:22 · 4306 阅读 · 0 评论 -
数据结构初阶之顺序表数组OJ题一——移除元素
1.题目链接:https://leetcode-cn.com/problems/remove-element解题思路:本题最简单的方法是采用双指针做法原创 2022-04-07 17:27:03 · 4536 阅读 · 0 评论 -
数据结构初阶之顺序表(C语言)
一. 顺序表分类静态顺序表 动态顺序表静态顺序表:使用定长数组存储元素动态顺序表:使用动态开辟的数组存储二. 接口实现静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪 费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小,所以下面我们实 现动态顺序表。将要实现的功能:基本的增删查改,包括:初始化,检查空间,尾插,头插,尾删,头插,头删,查找,在指定位置插入,删除指定位置的值,销毁,打印//原创 2022-04-03 12:43:30 · 5530 阅读 · 0 评论 -
数据结构初阶——复杂度OJ练习题
第一题对于该题,最能想到应该有四种方法:1. 排序可以将元素排序好,再遍历一遍数组看后一个是否是前一个元素的值+1,但是从对于初学者掌握的无非就是冒泡排序或者qsort很遗憾,虽然但是,不满足题目的时间复杂为O(n),因为冒泡排序的时间复杂度为O(n^2),qsort的时间复杂度为O(nlogn)因此,因此不行2. 映射开辟一个数组并初始化为-1(因为有0的存在),把对应的数字放入对应的数组下标所对应的数组元素中,然后再遍历一遍数组,出现负数的那个元素则为缺少的数字很遗原创 2022-03-29 21:34:26 · 3890 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度
章节算法效率 时间复杂度 空间复杂度 常见时间复杂度以及复杂度oj练习一. 算法的效率1. 如何衡量一个算法的好坏如何衡量一个算法的好坏呢?比如对于以下斐波那契数列:long long Fib(int N){ if(N < 3) return 1; return Fib(N-1) + Fib(N-2);}斐波那契数列的递归实现方式非常简洁,但简洁一定好吗?那该如何衡量其好与坏呢?2. 算法的复杂度算法在编写成可执行程序后,运行时需要耗费时间资源原创 2022-03-29 18:06:50 · 5393 阅读 · 0 评论 -
C语言之程序环境和预处理
重点程序的翻译环境 程序的执行环境 详解:C语言程序的编译+链接 预定义符号介绍 预处理指令 #define 宏和函数的对比 预处理操作符#和##的介绍 命令定义 预处理指令 #include 预处理指令 #undef 条件编译一. 程序的翻译环境和执行环境在ANSI C的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码。二. 详解编译+链接 1.翻译环境组成..原创 2022-03-26 19:16:35 · 4200 阅读 · 0 评论 -
C语言实现通讯录终版
前言:其中的存储与读取功能采用的是二进制方式存取,可以使用文本方式,但是较为复杂易错(只是对于我来说)逻辑代码:#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"/* 该程序中所报的警告都可忽略不计,不造成影响*//* 通讯录终极版: 1. 可以存放一千个人的信息 2. 人的信息:名字,年龄, 电话, 住址, 性别 3. 增加联系人 4. 删除联系人 5. 查找联系人 6. 修改联系人 7. 排序(名字/年原创 2022-03-26 14:11:58 · 3636 阅读 · 0 评论 -
C语言实现通讯录初版
逻辑代码块:#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"/* 该程序中所报的警告都可忽略不计,不造成影响*//* 通讯录: 1. 可以存放一千个人的信息 2. 人的信息:名字,年龄, 电话, 住址, 性别 3. 增加联系人 4. 删除联系人 5. 查找联系人 6. 修改联系人 7. 排序(名字/年龄) 8. 保存联系人 9. 读取联系人*///使用枚举更方便,更易懂enum opration{原创 2022-03-24 23:48:35 · 4383 阅读 · 0 评论 -
C语言之扫雷
逻辑代码:#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu(){ printf(" 游戏菜单\n"); printf("1. play\n"); printf("2. exit\n");}void ruler(){ printf("\n"); printf(" 扫雷游戏规则\n"); printf("\n"); printf("输入严格按照以下要求:\n"); printf("1.原创 2022-03-15 17:51:20 · 7129 阅读 · 0 评论 -
printf函数关于截断和整形问题
printf在传入参数的时候如果是整形会默认传入四字节 由于printf是可变参数的函数,所以后面参数的类型是未知的,所以甭管你传入的是什么类型,printf只会根据类型的不同将用两种不同的长度存储。其中8字节的只有long long、float和double(注意float会处理成double再传入),其他类型都是4字节。 读取时,%lld、%llx等整型方式和%f、%lf等浮点型方式读8字节,其他读4字节。例题:int main(){ unsigned char a = 200原创 2022-03-13 14:37:20 · 3113 阅读 · 0 评论 -
三子棋游戏源代码
游戏本体:#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void Initboard(char board[ROW][COL], int row, int col){ int i = 0; int j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { board[i][j] = ' '; } }}void Displayb原创 2022-03-12 10:24:58 · 6751 阅读 · 0 评论 -
C语言文件操作
本章重点为什么使用文件 什么是文件 文件的打开和关闭 文件的顺序读写 文件的随机读写 文本文件和二进制文件 文件读取结束的判定 文件缓冲区一. 为什么使用文件我们前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数 据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯 录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受。我们在想既然是通讯录就应该把信息记录下来,只有我们自己选择删除数据的时候,数据才原创 2022-03-11 18:48:40 · 2960 阅读 · 0 评论 -
C语言进阶之动态内存管理
本章重点为什么存在动态内存分配 动态内存函数的介绍mallocfreecallocrealloc常见的动态内存错误 几个经典的笔试题 柔性数组一. 为什么存在动态内存分配我们已经掌握的内存开辟方式有:int val = 20;//在栈空间上开辟四个字节char arr[10] = {0};//在栈空间上开辟10个字节的连续空间但是上述的开辟空间的方式有两个特点:空间开辟大小是固定的。 数组在申明的时候,必须指...原创 2022-03-07 20:48:09 · 1026 阅读 · 0 评论 -
C语言进阶之自定义类型:结构体,枚举,联合
前言结构体(1)结构体类型的声明(2)结构的自引用(3)结构体变量的定义和初始化(4)结构体内存对齐(5)结构体传参(6)结构体实现位段(位段的填充&可移植性)枚举(1)枚举类型的定义(2)枚举的优点(3)枚举的使用联合(1)联合类型的定义(2)联合的特点(3)联合大小的计算。一、结构体1.结构体的声明(1)结构的基础知识结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。(2)结构的声明...原创 2022-03-05 15:21:23 · 1558 阅读 · 0 评论 -
C语言进阶之字符函数和字符串函数
重点介绍处理字符和字符串的库函数的使用和注意事项求字符串长度strlen长度不受限制的字符串函数strcpystrcatstrcmp长度受限制的字符串函数介绍strncpystrncatstrncmp字符串查找s...原创 2022-03-02 11:49:02 · 1513 阅读 · 0 评论 -
C语言进阶之指针的进阶
字符指针 数组指针 .指针数组 数组传参和指针传参 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 指针和数组面试题的解析1. 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。2. 指针的大小是固定的4/8个字节(32位平台/64位平台)。3. 指针是有类型,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限。 4. 指针的运算。一.字符指针在指针的类型中我们知道有一种指针类型为字符指针 char* ;一般使用:int mai.原创 2022-02-27 16:03:54 · 1141 阅读 · 0 评论 -
C语言之关于在线OJ多组输入问题
针对在线OJ出现的一种多组输入的题目可使用下面输入方式:scanf("%d", &num) != EOFscanf("%c", &ch) != EOFscanf读取失败时返回EOF(end of file),一个文件结束的标志这里还有一种书写方式:~scanf("%c", &ch)原因:EOF的值是 -1 ,-1的补码是32个1,而按位取反以后就变成了0,0为假用这两种输入方式作为一个循环的控制条件,常用于while循环PS:在字原创 2022-01-27 16:27:52 · 1930 阅读 · 0 评论 -
C语言进阶之深度剖析数据在内存中的存储
数据类型详细介绍 整形在内存中的存储:原码、反码、补码 大小端字节序介绍及判断 浮点型在内存中的存储解析一.数据类型介绍基本的内置类型:char 字符数据类型short 短整型int 整形long 长整型long long 更长的整形float 单精度浮点数double 双精度浮点数C语言无字符串类型类型的意...原创 2021-12-21 23:52:35 · 858 阅读 · 0 评论 -
C语言之实用调试技巧
什么是bug? 调试是什么?有多重要? debug和release的介绍。 windows环境调试介绍。 一些调试的实例。 如何写出好(易于调试)的代码。 编程常见的错误。一.什么是bug?第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误。二.调试是什么?有多重要?1. 调试是什么?调试(英语:Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序 错误的一个过程。2.调试的基本步骤发现程序错误的存在 以隔离、...原创 2021-12-13 16:34:32 · 3845 阅读 · 0 评论 -
C语言之结构体
结构体类型的声明 结构体初始化 结构体成员访问 结构体传参一.结构体的声明1. 结构的基础知识结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。原创 2021-12-10 13:27:55 · 183 阅读 · 0 评论 -
C语言之指针
1. 指针是什么2. 指针和指针类型3. 野指针4. 指针运算5. 指针和数组6. 二级指针7. 指针数组一. 指针是什么指针是什么? 指针理解的2个要点:1. 指针是内存中一个最小单元的编号,也就是地址2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量总结:指针就是地址,口语中说的指针通常指的是指针变量。那我们就可以这样理解:内存内存 一个字节 0xFFFFFFFF 一...原创 2021-12-06 20:07:15 · 628 阅读 · 0 评论 -
C语言之操作符详解
各种操作符的介绍。 表达式求值一. 操作符分类算数操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员二. 算术操作符+ - * / %1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。3....原创 2021-12-06 14:54:41 · 653 阅读 · 0 评论 -
C语言之数组
一.一维数组的创建和初始化1 数组的创建数组是一组相同类型元素的集合数组的创建方式:type_t arr_name [const_n];//type_t 是指数组的元素类型//const_n 是一个常量表达式,用来指定数组的大小...原创 2021-12-03 19:55:43 · 1303 阅读 · 0 评论 -
C语言之函数——递归
1. 什么是递归程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解, 递归策略 只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:把大事化小总之:函数递归就是函数调用自己!每一次函数调用都会在内存的栈区申请一块空间当被申请的空间超过栈区的空间原创 2021-11-28 11:57:50 · 1080 阅读 · 0 评论 -
C语言之函数 —— C程序的基本组成单位
一. 函数的分类1. 库函数C语言常用的库函数都有:IO函数字符串操作函数字符操作函数内存操作函数时间/日期函数数学函数其他库函数注: 1. 但是库函数必须知道的一个秘密就是:使用库函数,必须包含 #include 对应的头文件。 2. 参考文档使用库函数。#include <stdio.h>int main(){ char arr[] = "abc"; //size_t -> unsigned int ...原创 2021-11-25 21:23:09 · 1219 阅读 · 0 评论 -
C语言之循环语句
一. whilewhile 语句,可以实现循环//while 语法结构while(表达式) 循环语句; //表达式为真执行循环语句,表达式为假则不执行循环语句在屏幕上打印1-10的数字#include <stdio.h>int main(){ int i = 1; while(i<=10) { printf("%d ", i); i = i+1; } return 0;}1.while语句中的break//break 代码实例..原创 2021-11-23 14:09:15 · 5716 阅读 · 4 评论 -
C语言之分支语句
一. 语句C语言语句分为以下五类:1. 表达式语句2. 函数调用语句3. 控制语句4. 复合语句5. 空语句其中控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语 言有九种控制语句。分为三类:1. 条件判断语句也叫分支语句:if语句、switch语句;2. 循环执行语句:do while语句、while语句、for语句;3. 转向语句:break语句、goto语句、continue语句、return语句二. 分支语句(选原创 2021-11-03 13:01:51 · 4077 阅读 · 0 评论 -
初识C语言二
1. 选择语句if...else switch2. 循环语句whlie for do...while3. 函数#include <stdio.h>int main(){ int num1 = 0; int num2 = 0; int sum = 0; printf("输入两个操作数:>"); scanf("%d %d", &num1, &num2); sum = num1 + num2; p.原创 2021-11-01 23:09:13 · 540 阅读 · 0 评论 -
初识C语言一
1. main函数是程序的入口,一个工程中main函数有且仅有一个2. 数据类型(1)char 字符数据类型(2)short 短整形(3)int 整形(4)long 长整形(5)long long 更长的整形(6)float 单精度浮点数(7)double 双精度浮点型注:C语言没有字符串类型#include <stdio.h>int main(){ printf("%d\n", sizeof(char)); ...原创 2021-10-17 19:23:54 · 181 阅读 · 0 评论