c语言
文章平均质量分 85
详细的c语言讲解与知识分享
Ornamrr
09.31
展开
-
队列实现杨辉三角(附详细图解)
之前我已经写了两篇关于队列的基本功能,今天我们使用循环顺序队来实现输出杨辉三角。这是我们最终想要的效果:*目录算法思路代码实现思考总结算法思路这里我将使用图示法配合文字。代码实现关于代码,这里只展示核心部分。其他关于入栈,出栈,初始化的操作请移步我之前的文章。附上链接:顺序队与链队(一)#include"SqQueue.h"void test(){ SQ s; s.SQInit(); //杨辉三角的过程 int line = 7;//杨辉三角的行数 int val原创 2021-04-15 14:37:04 · 12831 阅读 · 7 评论 -
【C语言】二叉树
今天我们来讲解一下 与二叉树链式结构有关的操作。原创 2021-10-03 12:06:13 · 98 阅读 · 0 评论 -
【C语言】队列
今天我们来介绍一种新的数据结构,队列。目录队列的概念即结构队列的实现栈与队列练习题队列的概念即结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头队列的实现队列与栈类似。也可以选择数组或者链表来实现。但是使用链表结构的话更优一些,因为使用数组的结构,出队列在数组的头部,效率低于链表。栈与队列练习题...原创 2021-10-03 00:02:52 · 1856 阅读 · 0 评论 -
【图解C语言】非递归 实现 归并排序
这一篇文章,我们来讲解一下使用非递归的方式来实现归并排序:如果有小伙伴没有看过归并排序的常规写法,或者想了解其他的排序方法,可以看下面这篇博客:【图解C语言】只是朴实无华的排序罢了首先我们我们要思考,我们是使用循环还是栈模拟来代替递归:对于这个问题,一般我是这样选择的:递归是把一个问题有最大分解到最小,而循环是把一个问题由最小还原到最大,所以,如果一个问题从最小大最大 或者 最大到最小 都可以解决,那么一般我们使用循环去实现递归,否则,使用栈模拟。可能这样讲比较抽象,我们以斐波那契数列为例:Fi原创 2021-10-02 00:08:43 · 1057 阅读 · 0 评论 -
【图解C语言】只是朴实无华的排序罢了
今天我们来介绍几种常见的排序方法:目录插入排序直接插入排序希尔排序选择排序选择排序堆排序`交换排序冒泡排序快速排序归并排序总结与比较插入排序直接插入排序直接插入排序的思路比较简单,我们将数组分为两部分:有序区和无需区。我们不断将无序区的第一个元素插入到有序区中,同时保证有序区的元素继续有序。我们最开始的有序区只有一个元素(首元素):接下来我们把无序区的第一个元素插入有序区:我们继续重复这个步骤即可,当无序区中没有元素,排序完成分析直接插入的排序过程,我们可以发现:元素越接近有序,直原创 2021-09-26 15:39:46 · 260 阅读 · 0 评论 -
【图解C语言】快速排序,真的好快捏
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法。其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。// 假设按照升序对array数组中[left, right)区间中的元素进行排序void QuickSort(int array[], int left, int right){if(right <=原创 2021-09-25 22:20:18 · 375 阅读 · 0 评论 -
【C语言】堆
今天我们来讲一种新的数据结构:堆。目录堆的概念堆的实现堆的向下调整算法堆的创建建堆的时间复杂度堆的相关操作堆的插入堆的删除堆的代码实现堆的应用堆排序TOP_K问题堆的概念如果有一个关键码的集合K = { , , ,…, },把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足: <= 且 <= ( >= 且 >= ) i = 0,1,2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。堆的性质:堆中某个节点原创 2021-09-04 21:12:24 · 749 阅读 · 0 评论 -
【C语言】栈
在上一篇文章中,我们讲解了链表,这一篇文章我们来讲解栈。这里写目录标题栈栈的概念栈的实现栈栈的概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现栈的实现可以使用 链表 和 数组;相比而言,数组的结构实现更优一点,原因在于在数组的尾上原创 2021-08-30 16:56:32 · 81 阅读 · 0 评论 -
【C语言】图解链表经典例题
注:所有题目均默认链表不带头结点1. 删除链表中等于给定值 val 的所有节点。删除值为val的节点,显然我们得找到其前驱节点prev,再将val->next链接至val->next我们还要注意一些特殊情况,当链表为空的时候,当链表头结点的值为val时,我们找前驱节点的方法是失效的。void removeElements(SLTNode** pphead, SLTDataType val)//去除特定数据{ assert(pphead); assert(*pphead);//原创 2021-08-29 21:39:52 · 1093 阅读 · 0 评论 -
【C语言】自定义类型
结构体,枚举,联合体原创 2021-08-19 18:58:45 · 299 阅读 · 2 评论 -
字符函数与字符串函数
今天我们重点介绍处理字符和字符串的库函数的使用和注意事项。目录求字符串函数strlen长度不受限制的字符串函数strcpystrcatstrcmp长度受限制的字符串函数介绍strcpystrcatstrcmp字符串查找strstrstrtok错误信息报告strerror字符操作内存操作函数emcpymemmovememsetmemcmp求字符串函数strlen长度不受限制的字符串函数strcpystrcatstrcmp长度受限制的字符串函数介绍strcpystrcatstrcmp字符原创 2021-08-17 17:44:08 · 145 阅读 · 0 评论 -
【C语言】文件操作
今天我们来讲一下文件的操作:目录什么是文件文件名文件类型文件缓冲区文件指针文件的打开和关闭文件的顺序读写文件的随机读写文件结束的判定什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件文件名文件类型文件缓冲区文件指针文件的打开和关闭文件的顺序读写文件的随机读写文件结束的判定...原创 2021-07-23 14:59:20 · 288 阅读 · 0 评论 -
【C语言】《动态内存 管理大师 ^ - ^》
目录为什么需要动态内存分配动态内存函数malloccallocfreerealloc常见动态内存错误经典例题为什么需要动态内存分配我们已知的内存分配有:int val = 20;//在栈空间上开辟四个字节char arr[10] = {0};//在栈空间上开辟10个字节的连续空间但是上述的开辟空间的方式有两个特点:1. 空间开辟大小是固定的。2. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候原创 2021-07-21 09:48:22 · 118 阅读 · 0 评论 -
【c语言】内存的世界,数据何以为家(一)---整形篇
就像我们存在于叫做地球的表面,数据存在于叫做内存的世界。我们肆无忌惮的改变着他们所在的世界,轻易定义他们的人生。数据的世界,从电流通过的瞬间,悄然开始。1.1基本设定–数据类型归类两大家族,三大类型 构成 数据世界的基本秩序。三大类型作为贵族,可以随时征配两大家族,三大家族掌管平民当然这世界还有唯一的王:我。整形家族charunsigned charsigned charshortunsigned short [int]signed short [int]intunsi.原创 2021-06-06 20:00:50 · 186 阅读 · 2 评论 -
三子棋---C语言初阶小游戏
三子棋—C语言初阶小游戏这里写目录标题三子棋---C语言初阶小游戏1.头文件 game.h2.源文件 game.c3.测试文件test.c1.头文件 game.h在这一步,我们得思考我们需要实现那些功能,按照什么规则呈现。#pragma once#include<stdio.h>#include<stdlib.h>#include<time.h>#define ROW 3#define COL 3//初始化棋盘void InitBoard(char原创 2021-05-05 14:06:38 · 180 阅读 · 2 评论 -
【c语言】内存的世界,数据何以为家(二)---浮点形篇
在之前的博客中,我们已经介绍了整型数据的存储,今天我们来介绍浮点型数据的存储。【c语言】内存的世界,数据何以为家(一)—整形篇我们先来看一个程序,感受一下浮点型的存储:#include<stdio.h>int main(){ int n = 9; float* pFloat = (float*)&n; printf("n的值为:%d\n", n); printf("pFloat的值为:%f\n", *pFloat);//是以浮点数的视角去看的原创 2021-07-07 16:16:38 · 210 阅读 · 0 评论 -
扫雷---C语言初阶小游戏(二)
扫雷—C语言初阶小游戏(二)1.头文件game.h在头文件的部分,我们得先想清楚我们该如何实现各个步骤,需要哪些函数,这个时候不需要想的太细致,只需有思路,相关参数,返回类型可以之后完善。在这里,我先提出几个比较核心的问题:1.如何埋雷,手动埋吗2.在棋盘(二维数组)中,如何同时把雷的坐标记录好,又把每个坐标周围的雷个数记录好,会引起混乱吗?3.每个坐标周围的雷个数如何统计?#pragma once#include<stdio.h>#include<stdlib.h&原创 2021-05-05 16:00:21 · 234 阅读 · 4 评论 -
指针与数组 试题大集合
今天我们来看一组有关 指针与数组的笔试题 ,来巩固一下上一篇博客学习的知识。上一篇博客的链接附上:進撃の指针一. 一维数组与指针数组名 通常 代表数组首元素的地址但有两个意外:———————————————————————————————————一. sizeof(数组名)—数组名表示整个数组,计算的是整个数组的大小,单位是字节二. &arr 数组名表示整个数组,取出的是整个数组的地址1.#include<stdio.h>int main(){ int原创 2021-07-17 10:08:42 · 191 阅读 · 0 评论 -
数据的存储-整形篇习题
在本文中,我会举例一些有关整形数据存储的典型的例题,并详细讲解。题目一 #include<stdio.h> int main() { char a = -1; signed char b = -1; //有符号字符型 unsigned char c = -1; //无符号字符型 printf("a=%d,b=%d,c=%d", a, b, c); //以整形输出 return 0; } 对于 signed char b = -1,我们这样理解:原创 2021-06-09 19:15:40 · 193 阅读 · 1 评论 -
進撃の指针
本篇文章建议 对指针已经有初步了解的小伙伴 阅读。我们会讲到:字符指针数组指针指针数组函数指针函数指针数组这里写目录标题字符指针二级目录三级目录一级目录二级目录三级目录字符指针二级目录三级目录一级目录二级目录三级目录...原创 2021-07-14 11:59:53 · 158 阅读 · 0 评论