数据结构与算法
良心未来程序员,在线教学!!!
遇事不通请右转
新人报道,希望大家多多关注
展开
-
数据结构与算法——专栏总集篇
前言:数据结构与算法是唯一的、我们能够在任何编程语言都能用到的思想。说点实在的,算法工程师的工资也是众多编程语言工程师中最高的。所以,高的工资也有高的要求,算法思想也是非常难懂的,希望同学们在学习本专栏时遇到无法理解的障碍后不要轻易放弃。那么,本人在这里来提供一个目录来帮助同学们学习本人的《数据结构与算法》专栏的博问吧!目录:第一课:不带头节点的链表------------------...原创 2019-10-09 13:32:35 · 655 阅读 · 0 评论 -
贪吃蛇
本人先来构造一个可以用来表示一条蛇的结构体:typedef struct SNAKE{ int head; //这个成员是为了我们之后判断蛇头方向用的 int len; //这个成员用来记录蛇当前 “应该”有的长度 int curlen; //这个成员用来记录蛇当前 “实际”的长度 int direct; //这个成员表示键盘输入的指令 SNAKE_BODY *snake; //这个成...原创 2019-11-16 23:44:07 · 301 阅读 · 0 评论 -
循环数组
在我们今后的编程中,可能会遇到这种情况:要求给数据链增添数据的同时要删去当前数据链的第一个数据。看到这个问题,相信好多同学想到了两种方法:1.用链表。因为我们的数据链是变化的,而且改的是第一个数据和最后一个数据。首先我对这个想法做一下评价:这种想法是好的,因为它不会像数组一样,浪费极大的空间,但是,这个想法还是有缺陷的,因为我们每增加一个数据,都要改变头指针和增添尾指针,这样下来,十分耗时...原创 2019-11-16 23:43:45 · 688 阅读 · 0 评论 -
八大排序 详解(中)
在这篇博文中本人就不过多解释排序的重要性了,接着是本人上篇博文——《八大排序 详解(上)》来讲,在这篇博文中,本人要进行讲解的是剩下的四大排序——插入排序、希尔排序(插入排序的进阶版)、桶排序以及归并排序五、插入排序:插入排序的原理是:将所需排列的数组分为两半——已排和未排每次将未排的第一个数取出,然后从已排数组的第一个开始比较,遇到比它大的数,就插到那个数的前面。我们现在来举个例子来...原创 2019-09-26 00:19:10 · 313 阅读 · 0 评论 -
八大排序 详解(下)——指向函数的指针 的使用
紧接前两篇博文,我们这篇博文所要讲解的是我们前两篇博文编写的所有函数的使用、生成随机数组的函数的讲解以及一种及其凶悍的调用方法——指向函数的指针的使用,那么,废话不多说,开始我们的主题吧!首先,本人要讲解的不是各种算法思想,而是能够生成随机数组的一些操作,这样对于我们接下来的各种算法的运行结果以及运行时间就能够进行检测,并且还排除偶然现象导致我们得出错误的结果。那么,本人先来讲解一下关于产生随...原创 2019-09-26 17:35:21 · 364 阅读 · 0 评论 -
不带头节点链表
在之前的博文中,本人编写了带头节点的链表(宿舍管理系统),总的来说,带头节点链表和不带头节点链表在大体思路上是相同的,但是在部分方面也是存在着一些差异,那么,现在,本人通过来编写一个学生管理系统来讲解一下不带头节点的链表那么,回归主题,下面开始讲解一下基本步骤和相关代码:首先,来介绍一下什么是不带头节点链表:不带头节点链表:简单来讲,就是用一个指针指向一个链表的第一个节点。下图为示意...原创 2019-09-22 13:19:33 · 213 阅读 · 0 评论 -
队列的实现
我们在学习数据在内存中的存储方式时就会了解到堆栈和队列,堆栈和队列是数据存储的最常见的两种,那么,我现在来介绍一下堆栈和队列的异同点:相同点:栈与队列的相同点:1.都是线性结构。2.插入操作都是限定在表尾进行。3.都可以通过顺序结构和链式结构实现。、4.插入与删除的时间复杂度都是O(1),在空间复杂度上两者也一样。5.多链栈和多链队列的管理模式可以相同。不同点:1、队列先进先出,...原创 2019-09-14 11:14:04 · 171 阅读 · 0 评论 -
哈夫曼压缩(二叉树的使用)
本章博文用来使用二叉树的知识来对文件进行压缩与解压缩,这种压缩专门针对 ASCII 码(英文及英文标点)的压缩技术,希望这篇博文能帮助到正在学习或者想要练习二叉树方面知识的同学!!!开篇我来介绍一下什么是二叉树:二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”。(示意图如下)如上图所示,二叉树的“度”小于等于2那么,什么是哈夫曼压缩呢?这里,我先引进一个知识点...原创 2019-09-13 18:06:00 · 528 阅读 · 0 评论 -
八皇后问题——递归精讲
我们先来实现一个非常熟悉的递归操作——阶乘那么,不需要多说,相信好多同学都会想到如下代码:int factorial(int n) { if(n<0) { return -1; } return n == 0 ? 1 factorial(n-1);}我们再来复习一个曾经学习C的时候编写过的一个程序——兔子繁殖问题(斐波那契额数列)代码如下:int Fibonacc...原创 2019-09-28 00:30:23 · 183 阅读 · 0 评论 -
发牌算法 的实现
我们在了解计算机语言的时候,能够知道,当软件被使用时,会先调入内存,当调用完成,就释放空间。那么。这些连续存储空间的分配和回收操作,存在一个问题:会产生“内存碎片”为了避免上述情况,现代计算机通常采用“页式存储系统”来实现内存申请与回收操作那么,为了将这个例子更加形象地展示出来,我们这里用一个算法来解释这种操作的原理——发牌算法发牌算法:顾名思义,要求是,发出去的牌不会再次被发出现在看...原创 2019-09-28 19:31:17 · 581 阅读 · 0 评论 -
八大排序 详解(上)
作为一名合格的程序员,最基本的,也是最经常使用的一些算法,我们将它放在数据结构与算法专栏最后几篇博文中,就是因为它十分重要并且对于刚接触数据结构与算法的同学来说,部分代码十分晦涩难懂,希望大家看完这两篇博文后能够对其重视,最终有所收获!那么,言归正传,我们今天来进行我们代码的编写以及讲解:在我们编程开始之前,我要声明一点,我们所有排序的结果有两种:升序以及降序,但是两种的主要处理思路是一样的,...原创 2019-09-25 16:55:35 · 339 阅读 · 0 评论 -
巨大数——三则运算(+、-、*)
这篇博文,主要讲解了一个思想 —— 将字符串转换为数值,再转换为结构体,以及部分文件操作的复习使用。那么,回归主题:据我们所知,int 型变量最大能表示的正数是21亿多,那么,如果我们要处理比21亿大很多的数据,我们要怎么实现呢?因为其他类型也是有极限值的,所以,如果突破了极限,就会出现错误。口说无凭,我们来用vc6.0尝试下:可以看到,我输入了22亿,但是输出的却不是43亿。所以,由此可...原创 2019-08-12 15:59:41 · 861 阅读 · 0 评论 -
指针与数组
这篇博客用来介绍指针与数组,在本人《歌德巴赫猜想———极限算法》这一节中使用到的一种动态定义数组的方法很多人是在学完c语言以后就开始学习数据结构与算法这门课程了,在以往的学习中,几乎没有能够使用到数组指针的地方,那么,为什么要介绍“指针与数组”呢?在今后的学习中,我们要编写的大部分代码是面向于用户的,那么问题来了,如果一个要定义的数组的长度让用户来决定,那么,这个数组要怎么来实现呢?这就牵扯...原创 2019-07-17 08:29:50 · 180 阅读 · 0 评论 -
表达式的处理(堆栈 的使用)
在我们使用电子产品进行数据的输入和处理时,我们输入的数据其实大多是字符串,之后计算机会对这些字符串进行一些处理,将字符串转换为我们所录入的数据,之后进行一系列的操作,完成我们所输入的指令。那么,这么看来,将所输入的字符串转化为正确的类型的数据也是非常重要的一步。所以,我们今天就来实现一下“表达式的处理”在之前的博文中本人也提到了堆栈的知识,如果没有学习过“堆栈”的知识的同学,建议了解一下。若...原创 2019-09-16 23:33:24 · 485 阅读 · 0 评论 -
二叉树的遍历 详解及实现
在之前的博文中我们讲解了二叉树的使用——《哈夫曼压缩》,那么,我们对于二叉树的操作不仅仅局限于创造,二叉树是一种储存处理方式,但是,我们不能仅仅是存储数据,那么,我们今天就来讲解一下从二叉树中读取数据的方法及操作。二叉树的遍历方式有三种:1.先根序:根 、左子树、右子树2.中根序:左子树、根 、右孩子3.后根序:左子树、右子树、根现在通过一个例子来为,我让大家清晰...原创 2019-09-21 01:11:09 · 348 阅读 · 0 评论 -
线性表 详讲及使用
在这里我要进行一下说明,在我们学习数据结构与算法之后,我们编程思维就不能仅仅局限于能够达成目标,而是在达成目标的基础上,代码的逻辑要相对直观清晰,时间复杂度和空间复杂度要相对低一些,这样,我们编写的代码才能算作是“合格”的代码所谓的线性表,是一种 逻辑线性结构,即,一对一结构。至于线性表的实现,可以用物理线性结构(即数组)来实现,也可以用物理非线性结构(即链表)实现。至于数组的方法,我们就不...原创 2019-09-21 14:37:37 · 386 阅读 · 0 评论 -
串匹配问题 (KMP算法) 详解
串这个概念对于我们学到现在的水平来说应该是经历颇丰了,因为在C语言中我们所用到的“串”知识是在字符串那里,有了这个概念,我们再去学习串就相对而言轻松多了。那么,现在来介绍一下串的基本知识点吧:首先,所谓的串:1.都由ASCII码组成;2.长度基本没有要求串的表示方式:1.顺序存储结构——数组2.非线性存储结构——链表那么,我们要对串进行实现和处理,就要编写以下函数:1.初始化“串...原创 2019-11-16 23:43:56 · 436 阅读 · 0 评论 -
指向函数的指针——消费未来
这一篇博文和标题一样,用于介绍指向函数的指针。那么,可能就有很多人要发问了,为什么要介绍指向函数的指针呢?指向函数的指针有什么用呢?其实,这些问题都可以用一个名词来解释,那就是指向函数的指针的功能——消费未来那么,就有人可能理解了我这个名词的意义,没有理解的同志也不要心急,且听本人细细分析:首先,我来给大家一个情景,如果你已经是一个程序员了,你要做一套“工具”程序,但在制作的时候,为了你的“...原创 2019-09-22 23:45:07 · 154 阅读 · 0 评论 -
哥德巴赫猜想 ——— 极限算法(你要是能写出比我用时还短的代码算我输)
哥德巴赫猜想哥德巴赫猜想概述:任何一个≥6之偶数,都可以表示成两个奇质数之和那么,接下来,我们就来研究研究哥德巴赫猜想的验证及优化方案:第一步,先建立头文件 “mec.h”(建立头文件的目的:简化程序,使程序更加直观,编写更加方便,在查找错误以及修改程序时,更加方便):#ifndef _MEC_H_#define _MEC_H_typedef unsigned char boo...原创 2019-06-17 22:03:28 · 1743 阅读 · 3 评论 -
位运算相关详解
前言:在之前的博客《哥德巴赫猜想的验证》中,我们用到了位运算,极大地降低了运行时间,提高了运行效率,那么,在这篇博客中,我们就来介绍一下位运算的基本内容,以及《歌德巴赫猜想》中所用到的函数的原理吧。首先,我来引用一下位运算的定义:程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。在这句话中,我们要注意的是:1.必须站在位的角度考虑运算...原创 2019-06-20 17:55:14 · 206 阅读 · 0 评论 -
文件 以及 相关操作示例
前言:只有接触了文件的代码,才算真正的编程,那么,这篇博客就来简单介绍一下文件吧文件的定义:文件是一个外存的范畴;文件是计算机表达信息的最小逻辑单位;文件就是信息二进制化后在外存中的存储。文件的组成:1.文件名;2.文件的主体内容;3.文件属性。文件内容:所有的内容都是二进制的!在这里要提到一点:操作系统(OS)在管理文件时,使用“文件控制块(FCB)”这样的数据。(所谓“文件...原创 2019-06-21 23:15:21 · 214 阅读 · 1 评论 -
内存对齐模式 —— 原理讲解
内存对齐模式定义原创 2019-10-05 01:09:45 · 986 阅读 · 0 评论 -
矩阵 的实现
矩阵在数据结构与算法的课程中也是非常重要的一章。矩阵也是一种存储数据的方式,所以本人通过这一章来对矩阵进行一下讲解以及说明。首先,我来提出一个很常见的面试题:请编写一个通用的二维数组(用c实现):这个问题相对而言比较简单,一个二维数组重要的只有三点,即:横下标、纵下标、值,所以我们来构建如下结构体:typedef struct MATRIX { USER_TYPE *data; ...原创 2019-09-15 11:42:06 · 500 阅读 · 0 评论