c语言进阶
文章平均质量分 68
讲解指针 链表 结构体 以及实际开发的技巧 专栏中会有c语言写的小应用小游戏的教程
viafcccy
reality is malleable.
展开
-
(*visit)(TElemType e )函数指针理解
基础知识函数指针 的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针。我们知道,函数的定义是存在于代码段,因此,每个函数在代码段中,也有着自己的入口地址,函数指针就是指向代码段中函数入口地址的指针。函数指针的声明方法为:返回值类型 ( *指针变量名) ([形参列表]);注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了...原创 2019-10-27 13:13:27 · 12994 阅读 · 3 评论 -
五子棋智能算法——博弈树编程实现一字棋(四)
一字棋指的是:在一个九宫格内率先连成三个字的取胜首先,基于前面决策树的讲解 博弈的棋类游戏等等 只要找到合适的估值函数都可以使用博弈树来实现 下面我们来使用博弈树完成一字棋的算法。根据前面的算法思想我们算法大致分为几步:1.对棋局落子有正确的估值2.通过遍历建立博弈树3.对博弈树进行α-β剪枝增快查找速度(这里由于数据量较小 放在最后一起讲解)4.根据极大值 极小值搜索...原创 2019-06-02 20:43:36 · 11729 阅读 · 6 评论 -
五子棋智能算法——决策树编程实现(三)
上一篇博客(https://blog.csdn.net/viafcccy/article/details/90724073)完成了对于决策树的数据处理 下面我们来建立决策树和上篇博客一样还是这些属性 在上一篇中我们计算了信息嫡 信息增量这两个重要的数据 并且将数据以链表的形式建立起来最后我们使用较为简单的ID3算法建立决策树ID3算法是决策树的一种,它是基于奥卡姆剃刀...原创 2019-06-01 01:00:51 · 1787 阅读 · 0 评论 -
五子棋智能算法——决策树数据处理(二)
其实博弈树与决策树本质上是相同的 只是决策树追求的是信息嫡的下降 使可能性趋于一个最大值从而达到预测效果 而博弈树正如上篇博文所述追求的是选择从自身打分最高的一步棋要是看懂了上篇文章的博弈树(https://blog.csdn.net/viafcccy/article/details/90648852)的思想这里决策树也就不难了 作为AI的入门算法决策树是异常重要的 这里我决定先去实现决...原创 2019-05-31 22:49:28 · 4065 阅读 · 0 评论 -
五子棋智能算法-博弈树算法思想详解(一)
学习这个算法之前必会链表 关于链表看这两篇博文https://blog.csdn.net/viafcccy/article/details/84502334https://blog.csdn.net/viafcccy/article/details/85041942在五子棋下棋中 我们最容易想到的算法就是对于棋局的推演 从而找到一种最佳的情况去使棋局向这个方向发展为了简单思考...原创 2019-05-28 23:37:41 · 31235 阅读 · 1 评论 -
数据结构-队列ADT
队列是一端插入一端删除的数据结构,不同于栈在一端同时删除和插入初始化后的队列ADT但是我们可以看到此时会有一种问题就是假溢出也就是我们入队5个元素后 将123位置的元素出列但是会发现 再次入队的话队列已经无法入队 因此我们需要引入一个循环队列的ADT这样我们就可以只用将队列从0直接入队但是怎样将rear游标移动到0这个位置呢?其实只需要套用下面的公式就可以...原创 2019-02-19 12:02:53 · 957 阅读 · 0 评论 -
数据结构-栈ADT
栈(stack)是限定仅在表尾插入和删除操作的线性表允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)我们可以类比手枪弹夹,浏览器的后退和前进等等都是栈栈的插入操作,称为进栈,也称压栈、入栈(push)栈的删除操作,称为出栈,也称为弹栈(pop)栈本身就是一个线性表,线性表的顺序存储和链式存储,对于栈来说也同样适用堆栈的顺序表示(利用...原创 2019-02-19 11:58:50 · 1083 阅读 · 0 评论 -
凸包算法详解(convex hull)
一.概念:凸包(Convex Hull)是一个计算几何(图形学)中的概念。在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,...Xn)的线性组合来构造.在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有...原创 2019-02-17 00:02:41 · 44823 阅读 · 9 评论 -
图的遍历
广度优先遍历:以一个顶点为起点,依次遍历以这个顶点为起始的所有路径例如:逐个遍历一下所有路径12314314514614717宽度优先遍历:以一个顶点为起点,将向下逐层遍历所有未被遍历过的顶点例如:访问1访问237访问356但是都只能访问一个连通分量,需要多次去访问完所有的连通分量#include<stdio.h>#...原创 2019-02-11 10:54:40 · 604 阅读 · 0 评论 -
图的邻接矩阵表示法和邻接表表示法
邻接矩阵表示法:(将图映射到二维数组)#include<stdio.h>#include<stdlib.h>#define ERROR 0#define OK 1#define Overflow 2//上溢#define Underflow 3//下溢#define NotPresent 4//元素不存在#define Duplicate 5//有重复...原创 2019-02-09 16:07:47 · 1089 阅读 · 0 评论 -
二维数组与指针
首先我们要知道数组名 或者 字符串名代表的是一个地址 也就是首地址但是这个地址的长度在同一台电脑是一样长的但是它所代表的步长不一样 也就是一个int指针+1会跳跃32位 而一个double会跳跃64位 因此重要的是理解指针与数组的关系 要明白指针是怎样跨越的 步长是多少先看这样一段代码void main(){ int a[3][3] = {1,2,3,4,5,6,7,8,...原创 2019-01-04 13:18:08 · 326 阅读 · 0 评论 -
数据结构-几种链表的总结
原创 2018-12-21 22:46:38 · 1760 阅读 · 0 评论 -
数据结构-双向链表
首先来看示意图其实可以看到双向链表比单向链表可以更快的访问到前置元素 但是需要更多的空间 也就是我们拿空间换取了时间 插入过程首先是插入头结点 在其他位置插入节点 #ifndef DATAELEMENT_H_INCLUDED#define DATAELEMENT_H_INCLUDED #define MAX_SIZE 255 #def...原创 2018-12-21 15:03:51 · 375 阅读 · 0 评论 -
数据结构-静态链表
静态链表就是把链表与数组结合起来,也就是用数组描述的链表,即称为静态链表。但是在java和c中这种数据结构是不需要的,它主要用于没有指针的编程语言。与线性表与数组的区别首先同样是定义一个头文件在头文件中定义函数,宏和全局变量#ifndef STATICLINKLIST_H_INCLUDED#define STATICLINKLIST_H_INCLUDED#include...原创 2018-12-21 13:23:54 · 336 阅读 · 0 评论 -
数据结构-循环链表
#ifndef CIRCULARLINKLIST_H_INCLUDED#define CIRCULARLINKLIST_H_INCLUDED#include <stdio.h>#include <stdlib.h>#include "DataElement.h"/** 循环链表的结点 */typedef struct CircularNode{ ...原创 2018-12-18 23:21:12 · 268 阅读 · 0 评论 -
数据结构-线性表之单链表(头插法和尾插法)【下】
有兴趣利用链表写贪吃蛇的看这篇https://blog.csdn.net/viafcccy/article/details/84483828数据结构-线性表之单链表(头插法和尾插法)【上】在这里https://blog.csdn.net/viafcccy/article/details/85041942链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的。在C语言中,链表是通过...原创 2018-11-25 21:12:44 · 15158 阅读 · 5 评论 -
数据结构-线性表之单链表(头插法和尾插法)【上】
有兴趣利用链表写贪吃蛇的看这篇https://blog.csdn.net/viafcccy/article/details/84483828数据结构-线性表之单链表(头插法和尾插法)【下】在这里https://blog.csdn.net/viafcccy/article/details/84483828因为头插法算法较为简单这里就用头插法作为案例 相较于顺序表的优点:1、不用定义...原创 2018-12-16 23:28:52 · 4263 阅读 · 1 评论 -
数据结构-线性表之顺序表
定义线性表(list/squencelist)是零个或多个数据元素的有限序列。线性表的特点1.数据元素是有序的2.数据元素是一对一的 线性表的数据集合为{a1,a2,......,an},每个元素类型均为datatype。其中除了第一个元素a1外,每个元素有且只有一个前驱元素,除an外,每个元素只有一个直接后继元素;数据元素之间是一对一的关系。 线性表的操作初始...原创 2018-12-15 23:35:14 · 359 阅读 · 0 评论 -
数据结构的基本概念
大家可以看看这两篇博客有助于理解https://blog.csdn.net/viafcccy/article/details/84641790https://blog.csdn.net/viafcccy/article/details/84583386 数据结构的起源世界上第一台计算机诞生于美国的宾夕法尼亚大学,名字叫做ENIAC(Electronic Numerical ...原创 2018-12-14 12:39:17 · 457 阅读 · 0 评论 -
c语言二级指针
二级指针做输入_第1种内存模型 直接利用二级指针首先看指针数组(变量为指针) 也就是数组中存的都是地址#include<stdio.h>void main(){ int i = 0, j = 0; int num = 0; char *myArray[] = {"aaaaaa","cccccc","bbbbbb","111111"};//这里定义的是指针所指...原创 2018-12-13 09:51:41 · 2483 阅读 · 0 评论 -
指针的释放
正确的释放指针的方法避免野指针的产生 #include <stdio.h>#include <string.h>#include <stdlib.h>int getMem(char **myp1, int *mylen1, char **myp2, int *mylen2){ char *tmp1 = NULL; char *tmp...原创 2018-12-12 18:42:11 · 12985 阅读 · 2 评论 -
c语言消除游戏(带排行榜)
程序截图先来看下思路1.初始化窗口2.开始游戏利用方向键移动光标对于可以消除的情况的判断记录相同颜色的位置小球下降补充新的小球记录分数3.如果计时结束后显示游戏结束4.释放资源首先我们需要graphics头文件 需要使用easyxhttps://docs.easyx.cn/帮助文档和下载地址在这里具体函数的用法可以看帮助文档自己查...原创 2018-12-12 14:17:51 · 8335 阅读 · 14 评论 -
c语言学生成绩管理系统(运用数组 链表 文本保存)
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>typedef struct student { char num[20]; //学号 char name[20]; ...原创 2018-12-10 23:14:52 · 2234 阅读 · 3 评论 -
c语言实现万年历教程
先来看效果图功能就是输入一个年月日 输出当月的日历基本思路1.打印一个日历的模板出来2.判断平年还是闰年3.设置一个时间的初始点 计算距离这一天的天数首先打印模板/***********************************************************************头文件***************************...原创 2018-11-27 21:54:04 · 46853 阅读 · 17 评论 -
c语言实现贪吃蛇教程
效果图如图 首先发现组成元素是“实心方块”我们可以百度 也可以在我这里直接复制 ▇ 进编译环境 (这个方块是两个字节这个很重要)完成这个小程序基本上我们分以下几步1.完成所有静态的元素(四周的方块界线)2.绘制蛇3.使蛇吃东西 下面分布进行实现首先完成第一步/*************************************************...原创 2018-11-25 13:29:58 · 19932 阅读 · 15 评论 -
c语言const用法总结
这里讲的是c中的const不是cpp中的int const a 等价于 int const bchar * const p 表示指针变量p中的地址不可被修改const char *p 表示指针p指向的内存空间不可被修改const chat * const p 表示指针变量和指向的内存空间都不可被修改 但是在c语言中const其实是个伪命题 因为它只是将变量设为不可修改 也...原创 2018-12-11 11:32:18 · 1533 阅读 · 0 评论 -
c语言实现五子棋人人对战教程
利用简单的c语言基础 实现最简单的功能 界面比较丑陋主要是刚学完c的一个小实践 未使用MFC所以界面没有很好看 主要目的加强对c语言的理解与运用 同时增加自己的代码量 首先要学一些头文件可以看我的博客前面的文章要用到到的头文件stdio.h stdlib.h windows.h time.h conio.h思路就是1.画个棋盘,使用数组来代替初始化出*2.使用循环使双方...原创 2018-11-23 22:08:37 · 6163 阅读 · 3 评论 -
c语言对字符串逆序反转去除空格
strstr_while模型看这篇https://blog.csdn.net/viafcccy/article/details/84886885两头堵模型将一个这种形式的“ zxcv ”求出多少个空格并且去除这里要用到一个isspace() 若参数c为空格字符,则返回TRUE,否则返回NULL(0)。就是这么简单 思路大概是这样通过指针从...原创 2018-12-08 17:16:18 · 846 阅读 · 0 评论 -
c语言寻找指定字符串的程序(程序利用指针完成封装)
一定要注意注释了*的位置 我调试了好久才发现自己没有分配内训指针定义完一定要记得三选一 1.去null了 2.分配内存 3.指向特定的位置还有就是宕机基本本质上都跟错误的操作内存有关还有就是关于字符串的输出问题首先下面的是正确的但是可以发现这样写编译器会自动输出指针指向的位置之后这个字符数组(字符串)的所有字符#include <stdio.h>#incl...原创 2018-12-07 21:02:42 · 675 阅读 · 1 评论 -
c语言指针进阶(三)
指针与内存四区理解的强化1)主调函数 被调函数主调函数可把堆区栈区全局区的数据内存地址传给被调函数被调函数只能返回堆区 全局数据2)内存分配方式指针做函数参数 是有输入输出特性的输入指的是 在主函数分配内存 在子函数修改输出指的是 在子函数分配内存 然后将修改后的指针扔出来 主函数定义一个指针去接char *f(int num){ int ret = 0...原创 2018-12-06 11:57:33 · 354 阅读 · 0 评论 -
c语言指针进阶总结
1,指针铁律 1.1,指针是一种数据类型 1, 指针也是一种变量,占有内存空间,用来保存内存地址。 指针既然是变量也要占用内存大小。一级指针的大小于其类型有关,二级以及二级以上的指针的大小是四个字节(32位机) 2,*p操作内存 ...原创 2018-12-05 15:12:15 · 836 阅读 · 0 评论 -
c语言字符串
c语言字符串都是以“/0”结尾而这里就有三个概念 EOF /0 -1 /n首先c语言中所有字符串的结尾标志都是/0 是字符串结尾的标志 它是一种转义符 而EOF是文件流结束标志代表着 文件(file),也可以是标准输入(stdin)的输入结束 而我们都知道大多数程序EOF的传递是靠-1这个返回值控制的 就相当于 #define EOF (-1) (在stdio.h中是这样定义的) 而'...原创 2018-12-05 14:04:48 · 36558 阅读 · 3 评论 -
c语言指针进阶(二)
指针不断的改变指向和多个指针操作一个内存空间首先这里强调一个问题就是假设我现在知道一个内存地址0xaa11 我怎样将这个地址直接给一个指针呢? 首先这样是没有语法错误的 确实也是这样定义的 但是地址我们是不能随便规定的 这个主要用于程序开发中我们向特定的地址(我们已知的地址)去写入数据(例如:通过I2C接口发送到MCU一个地址数据(unsigned char AdData),一个待...原创 2018-12-03 23:20:55 · 378 阅读 · 0 评论 -
c语言指针进阶(一)
指针也是一种数据类型指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。1)指针是一种变量,占有内存空间,用来保存内存地址指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都...原创 2018-12-02 16:06:52 · 915 阅读 · 0 评论 -
c语言函数调用模型
对于内存四区不懂得戳这里 内存讲解这篇文章需要知道内存四区的知识首先分级调用函数 使需要的数据入栈然后逐级出栈,返回数值,将栈区的内存进行释放 在main函数执行完之前 fa fb 都可以调用main函数在堆栈全局区的内存fb申请的内存fa main可以使用吗?1.fb在栈上分配的内存不能被main fa使用2.fb在堆上malloc的可以使用...原创 2018-12-01 14:05:04 · 1016 阅读 · 0 评论 -
指针函数和函数指针
1、指针函数是指带指针的函数,即本质是一个函数,函数返回类型是某一类型的指针。类型标识符 *函数名(参数表)int *f(x,y);首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。表示:float *fun();float *p;p ...转载 2018-11-30 13:02:03 · 185 阅读 · 2 评论 -
c语言开发套路-怎样快速调用别人的一套接口 api模型的抽象
圈出的部分要用直接copy stdio.h中的这个部分这段代码的意思就是 如果是cpp编译器 请使用c语言的规范去编译下面的代码假设现在有这样一个头文件#pragma once//SOCKET_H#ifndef _SOCKETCLIENT_H#endif _SOCKETCLIENT_H#ifdef __cplusplusextern "C" {#endif /...原创 2018-11-28 22:50:17 · 1255 阅读 · 0 评论 -
c语言指针进阶-内存的理解
看完内存后最好能看完这篇函数调用模型将函数怎样使用内存有一个深刻的认识 首先如图内存分四区 栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表 全局区(静态区)(static...原创 2018-11-30 14:02:35 · 805 阅读 · 0 评论 -
变量的本质解析
数据类型 固定内存大小的别名变量是既能写又能读的内存对象而一旦初始换不能修改的对象叫常量变量三要素:名称,大小,作用域变量的生命周期也是一个重要的概念 可以看成编译器何时自动释放掉内存可以看这篇变量的本质1.程序通过变量申请和命名内存空间2.通过变量访问内存空间一段连续的内存空间的别名与指针的关系类似于北京路=1号路变量名叫北京路 而指针就是...原创 2018-11-29 23:31:45 · 404 阅读 · 0 评论