随笔分类 - C/C++
摘要:链栈的定义 #include <iostream> using namespace std; //链栈,理论上只要内存够大不存在上溢,只存在下溢(栈空后继续取出元素) typedef struct _QNode { int data; struct _QNode *next; }StNode; 链栈
阅读全文
摘要:栈的定义 #include <iostream> #define MAXSIZE 1000 using namespace std; //顺序栈 typedef struct { int data[MAXSIZE]; //存放栈顶元素 int top; //栈顶指针 }SqStack; 栈的操作 初
阅读全文
摘要:说明 共享双链表意义在于,可以用一套函数维护不同数据类型的双链表 准备 定义双链表 #include <iostream> #include <string> using namespace std; //此处并不包含数据域,仅有指针域用于连接结点 typedef struct _DbLinkLis
阅读全文
摘要:双链表的代码定义 #include <iostream> using namespace std; typedef struct _DLNode { int data; //结点数据域 struct _DLNode *next; //指向后继的指针 struct _DLNode *prev; //指
阅读全文
摘要:顺序表应用——逆置问题 问题描述 给定一个顺序表,将其中的元素逆置 例子 给定一个顺序表,其中有0至10共11个元素从小至大排列,请将这11个元素逆置使其从大到小排列 以下是解题代码 代码 #include <iostream> #define MAXSIZE 100 typedef struct{
阅读全文
摘要:约瑟夫问题 介绍 约瑟夫问题,又称约瑟夫置换、丢手绢问题。 一般形式 (本部分内容来自百度百科) 约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3。 代码 问题描述 本文以以下问题为例
阅读全文
摘要:循环链表定义 定义与单链表一样,操作时将末结点的指针指向开始结点即可 typedef struct _LinkNode { int data; struct _LinkNode *next; }LinkList; 循环链表操作 初始化循环链表 bool InitList(LinkList* &L)
阅读全文
摘要:单链表代码定义 typedef struct LinkNode { int data; //data存放结点的数据域(以int类型为例) struct LinkNode *next; //结点的指针域 }LinkNode, LinkList; 单链表的操作 初始化单链表 bool initList(
阅读全文
摘要:题目介绍 描述 现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的: 1/1, 1/2 , 1/3, 1/4, 1/5, … 2/1, 2/2, 2/3, 2/4, … 3/1, 3/2, 3/3, … 4/1, 4/2, … 5/1, …
阅读全文
摘要:链表 链表的概念 定义:链表是一种物理存储单元上非连续、非顺序的存储结构,由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。 在链表的储存上,每个结点不仅包含所存的元素信息,还包含元素间的逻辑信息。 链表的特性 不支持随机访问:不能通过知道第一个元素的地址(即储存空间的首地址)
阅读全文
摘要:顺序表的操作 这里先定义个顺序表 #include <iostream> using namespace std; #define MAXSIZE 100 typedef struct{ int *elems; int length; int size; }Sqlist; Sqlist list;
阅读全文
摘要:顺序表 结点的概念 结点 :结点是内存中一片由用户分配的储存空间,只有一个地址来表示它的存在,没有显式名称。 在学习顺序表时,一般不会去特别强调结点的概念,此概念往往在链表学习中涉及,但并不代表结点与顺序表无关,所以我特意把结点的概念放在此处以加深对顺序表的理解。 顺序表的概念 定义:把逻辑上相邻的
阅读全文
摘要:区别 结构体变量 结构体变量作为形参,传递的是结构体变量本身,是一种值传递 形参结构体变量成员值的改变不影响对应的实参构体变量成员值的改变 结构体指针 结构体指针作为函数参数,传递的是指向结构体变量的本身 结构体指针指向的变量成员值的改变影响对应的实参构体变量成员值的改变 代码 直接说有些抽象难懂,
阅读全文
摘要:规则原理 如图 判断游戏结束 chessData.h //row,col 表示当前落子 bool checkWin(ChessData* game, int row, int col); 横、竖、斜(斜有两种)共四种情况,每种情况根据当前落子往后遍历5个子,有一种符合就胜利 chessData.cp
阅读全文
摘要:AI思考落子点 在之前我们已经实现计算权值了,现在要想让AI落子,应根据之前的计算结果使棋子落在分值最大点上。当然可能会出现多个分值相同的最大点,这时在其中随机取一个点落下即可。 chessData.h typedef struct point{ int row; int col; } point_
阅读全文
摘要:原理 计算 计算每个落子点的**“权值”**,找到权值最大的落子点 对于每个空白点,分别计算周围的八个方向 不妨以该空白点作为参照原点,以水平向右作为X轴正方向,以竖直向下为Y轴正方向建立平面直角坐标系 因为在计算某个方向时,正向和反向需同时考虑,实际上只需要四个方向,即向量(1,0)的方向、向量(
阅读全文
摘要:分析 在鼠标左键点击时,我们不能让新棋子在已有棋子的位置落下,同时我们还要让棋子在规定位置落下——棋盘线的交点处。 功能实现 创建数据类型 创建头文件chessData.h和源文件chessData.cpp 在chessData.cpp和main.cpp中分别引用头文件chessData.h #in
阅读全文
摘要:准备 我们首先要在程序中定义一个名为drawPNG的函数,用于输出png格式图片并使背景透明 引入头文件(需要提前安装EasyX) #include <graphics.h> 定义函数 drawPNG void drawPNG(IMAGE* picture, int picture_x, int p
阅读全文
摘要:开发环境 环境准备 Visual Studio Windows EasyX图形库 素材文件 素材文件已经准备了,点击此处获取 百度网盘链接 提取码:su6p 创建项目 打开Visual Studio 创建空项目 创建源文件main.cpp 在项目属性中的“高级”一栏里,设置使用多字节字符集 导入资源
阅读全文
摘要:指向常量的指针 指向常量的指针不能用于其所指对象的值。若想存放常量对象的地址,只能使用指向常量的指针。 const int a = 3; //a是个常量,其值不能改变 int *b = &a; //错误:b是个普通指针 const int *c = &a; //正确 *c = 8; //错误:c不能
阅读全文