
数据结构
文章平均质量分 66
Data structures are the way computers store and organize data. A data structure refers to a collection of data elements that have one or mor
viafcccy
reality is malleable.
展开
-
二叉树的顺序存储结构
其实呢也就是将树这种有指向的二维数据 像二维数组一样存在一个线性的 一维的 数据结构中下面来完成二叉树的顺序存储(一帮用于完全二叉树 避免内存浪费) 在顺序存储中如上图所示完成树的存储#include<stdio.h>#include<conio.h>#define MAX_SIZE 1024//定义顺序树类型typedef...原创 2019-06-08 18:58:44 · 38087 阅读 · 5 评论 -
二叉树基本概念和性质
二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。图3.1展示了一棵普通二叉树:所以二叉树顾名思义就是一个节点的度小于等于两个度的树 同时子树是有左右之分的不能随意颠倒(有序树) 二叉树性质1)在二叉...原创 2019-06-08 10:58:38 · 793 阅读 · 0 评论 -
树的基本概念
原创 2019-06-06 23:52:16 · 233 阅读 · 0 评论 -
KMP算法——病毒算法
#include<stdio.h>#include<stdlib.h>#include<string.h> //状态码#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define EQ 0#define GT 1#define EQ 0 //相等 ...原创 2019-06-06 19:57:22 · 3256 阅读 · 0 评论 -
KMP算法基础详解
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。例如下面的主串与子串...原创 2019-06-06 12:15:49 · 427 阅读 · 0 评论 -
BF算法-串的模式匹配
BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。这里我们来详细讲一下 算法的核心思想1.从主串第一个字符开始匹配2.如...原创 2019-06-06 00:53:05 · 1361 阅读 · 0 评论 -
数据结构-串ADT(字符串 完成头文件string.h的实现)
串的比较实际上比较的是字符编码,这里正好深入了解一下字符编码 :ASCII 编码ASCII占用8位(bit)。8个bit可以表示256个字符。ASCII码只规定了128个字符的编码。ASCII码的问题是字符太少,不能满足世界各国的需要。所以各国其他编码利用剩余的128个字符定义各自不同的编码。GB2312 & GBK汉字GB2312 使用两个字节(16位),...原创 2019-06-05 00:52:21 · 1392 阅读 · 0 评论 -
五子棋智能算法——博弈树编程实现一字棋(四)
一字棋指的是:在一个九宫格内率先连成三个字的取胜首先,基于前面决策树的讲解 博弈的棋类游戏等等 只要找到合适的估值函数都可以使用博弈树来实现 下面我们来使用博弈树完成一字棋的算法。根据前面的算法思想我们算法大致分为几步:1.对棋局落子有正确的估值2.通过遍历建立博弈树3.对博弈树进行α-β剪枝增快查找速度(这里由于数据量较小 放在最后一起讲解)4.根据极大值 极小值搜索...原创 2019-06-02 20:43:36 · 11927 阅读 · 6 评论 -
五子棋智能算法——决策树编程实现(三)
上一篇博客(https://blog.youkuaiyun.com/viafcccy/article/details/90724073)完成了对于决策树的数据处理 下面我们来建立决策树和上篇博客一样还是这些属性 在上一篇中我们计算了信息嫡 信息增量这两个重要的数据 并且将数据以链表的形式建立起来最后我们使用较为简单的ID3算法建立决策树ID3算法是决策树的一种,它是基于奥卡姆剃刀...原创 2019-06-01 01:00:51 · 1874 阅读 · 0 评论 -
五子棋智能算法——决策树数据处理(二)
其实博弈树与决策树本质上是相同的 只是决策树追求的是信息嫡的下降 使可能性趋于一个最大值从而达到预测效果 而博弈树正如上篇博文所述追求的是选择从自身打分最高的一步棋要是看懂了上篇文章的博弈树(https://blog.youkuaiyun.com/viafcccy/article/details/90648852)的思想这里决策树也就不难了 作为AI的入门算法决策树是异常重要的 这里我决定先去实现决...原创 2019-05-31 22:49:28 · 4139 阅读 · 0 评论 -
五子棋智能算法-博弈树算法思想详解(一)
学习这个算法之前必会链表 关于链表看这两篇博文https://blog.youkuaiyun.com/viafcccy/article/details/84502334https://blog.youkuaiyun.com/viafcccy/article/details/85041942在五子棋下棋中 我们最容易想到的算法就是对于棋局的推演 从而找到一种最佳的情况去使棋局向这个方向发展为了简单思考...原创 2019-05-28 23:37:41 · 31503 阅读 · 1 评论 -
数据结构-队列ADT
队列是一端插入一端删除的数据结构,不同于栈在一端同时删除和插入初始化后的队列ADT但是我们可以看到此时会有一种问题就是假溢出也就是我们入队5个元素后 将123位置的元素出列但是会发现 再次入队的话队列已经无法入队 因此我们需要引入一个循环队列的ADT这样我们就可以只用将队列从0直接入队但是怎样将rear游标移动到0这个位置呢?其实只需要套用下面的公式就可以...原创 2019-02-19 12:02:53 · 982 阅读 · 0 评论 -
数据结构-栈ADT
栈(stack)是限定仅在表尾插入和删除操作的线性表允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)我们可以类比手枪弹夹,浏览器的后退和前进等等都是栈栈的插入操作,称为进栈,也称压栈、入栈(push)栈的删除操作,称为出栈,也称为弹栈(pop)栈本身就是一个线性表,线性表的顺序存储和链式存储,对于栈来说也同样适用堆栈的顺序表示(利用...原创 2019-02-19 11:58:50 · 1117 阅读 · 0 评论 -
图的遍历
广度优先遍历:以一个顶点为起点,依次遍历以这个顶点为起始的所有路径例如:逐个遍历一下所有路径12314314514614717宽度优先遍历:以一个顶点为起点,将向下逐层遍历所有未被遍历过的顶点例如:访问1访问237访问356但是都只能访问一个连通分量,需要多次去访问完所有的连通分量#include<stdio.h>#...原创 2019-02-11 10:54:40 · 627 阅读 · 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 · 1107 阅读 · 0 评论 -
数据结构-几种链表的总结
原创 2018-12-21 22:46:38 · 1790 阅读 · 0 评论 -
数据结构-双向链表
首先来看示意图其实可以看到双向链表比单向链表可以更快的访问到前置元素 但是需要更多的空间 也就是我们拿空间换取了时间 插入过程首先是插入头结点 在其他位置插入节点 #ifndef DATAELEMENT_H_INCLUDED#define DATAELEMENT_H_INCLUDED #define MAX_SIZE 255 #def...原创 2018-12-21 15:03:51 · 385 阅读 · 0 评论 -
数据结构-静态链表
静态链表就是把链表与数组结合起来,也就是用数组描述的链表,即称为静态链表。但是在java和c中这种数据结构是不需要的,它主要用于没有指针的编程语言。与线性表与数组的区别首先同样是定义一个头文件在头文件中定义函数,宏和全局变量#ifndef STATICLINKLIST_H_INCLUDED#define STATICLINKLIST_H_INCLUDED#include...原创 2018-12-21 13:23:54 · 352 阅读 · 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 · 280 阅读 · 0 评论 -
数据结构-线性表之单链表(头插法和尾插法)【下】
有兴趣利用链表写贪吃蛇的看这篇https://blog.youkuaiyun.com/viafcccy/article/details/84483828数据结构-线性表之单链表(头插法和尾插法)【上】在这里https://blog.youkuaiyun.com/viafcccy/article/details/85041942链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的。在C语言中,链表是通过...原创 2018-11-25 21:12:44 · 15271 阅读 · 5 评论 -
数据结构-线性表之单链表(头插法和尾插法)【上】
有兴趣利用链表写贪吃蛇的看这篇https://blog.youkuaiyun.com/viafcccy/article/details/84483828数据结构-线性表之单链表(头插法和尾插法)【下】在这里https://blog.youkuaiyun.com/viafcccy/article/details/84483828因为头插法算法较为简单这里就用头插法作为案例 相较于顺序表的优点:1、不用定义...原创 2018-12-16 23:28:52 · 4320 阅读 · 1 评论 -
数据结构-线性表之顺序表
定义线性表(list/squencelist)是零个或多个数据元素的有限序列。线性表的特点1.数据元素是有序的2.数据元素是一对一的 线性表的数据集合为{a1,a2,......,an},每个元素类型均为datatype。其中除了第一个元素a1外,每个元素有且只有一个前驱元素,除an外,每个元素只有一个直接后继元素;数据元素之间是一对一的关系。 线性表的操作初始...原创 2018-12-15 23:35:14 · 369 阅读 · 0 评论 -
数据结构的基本概念
大家可以看看这两篇博客有助于理解https://blog.youkuaiyun.com/viafcccy/article/details/84641790https://blog.youkuaiyun.com/viafcccy/article/details/84583386 数据结构的起源世界上第一台计算机诞生于美国的宾夕法尼亚大学,名字叫做ENIAC(Electronic Numerical ...原创 2018-12-14 12:39:17 · 467 阅读 · 0 评论