数据结构内功修炼(初遇)
用C、C++编写基本的数据结构,给出一些算法的小例子。
threecat.up
保持对未知的好奇心(三只小猫)~感谢您的关注,一起快乐学习~
展开
-
KMP算法中计算next值和nextval的值
引言: 书上关于next和nextval的修正值方法比较难理解,所以我这里讲解自己的方法。这里我就不介绍关于字符串匹配中KMP的优点,也不强调next的修正值比next的值好在哪,我们就说方法就行了。一、next求解。来,首先给我们一个序列j 1 2 3 4 5 6 7 8 模式串 a b a a...原创 2019-12-27 18:22:50 · 7404 阅读 · 8 评论 -
整理几个简单有趣算法题(数据结构篇)
一、【题目描述】 有两个整数序列A=(a1,a2,......,an)和B=(b1,b2,......bn),分别用带头结点的单链表ha和hb存储,设计一个算法int SubList(LinkList ha,LinkList hb)用于判断B是否为A的连续子序列,若是,返回1,否则返回0.单链表中的结点的存储结构定义为:typedef struct LNode{ in...原创 2019-12-27 17:03:26 · 1682 阅读 · 0 评论 -
总结一下查找与排序的程序算法
前言: 总结一波!!!一、查找1.顺序查找int Search_Seq( SSTable ST , KeyType key ){ //若成功返回其位置,否则返回0 ST.R[0].key =key; for( i=ST.length; ; i-- ) if( ST.R[i].key==key ) return i; }2.折半查...原创 2019-12-24 17:47:21 · 609 阅读 · 0 评论 -
你需要打好线性表的基础——数据结构
引言: 我们都知道,盖房子需要坚实的基础,作为一个学完数据结构的弱鸡,我真切的感到了基础的力量。排开那些基本的概念,那些算法计算的表达。我们之后的大部分操作,都是建立在线性表的基础上,所以我们要学会利用这两大工具——顺序表和链表。只有掌握了它们,之后所有的算法才可以去谈实现,不然都是纸上谈兵(当然啦,会算法也很重要)。那么我们一起来学习吧,所有的讲解都是按照:初始化、取值、查找、插入、删...原创 2019-12-24 17:24:06 · 674 阅读 · 0 评论 -
数据结构总结(我的20篇博客教会你数据结构)
前言: 哈哈,你以为又是一个标题党?好吧,好像是,不不不,不是,老有用了! 本来总结要稍微晚点,但是后面想了一下,其实不需要分什么先后,如果有不妥的地方,也可以再次修改。本片博客没有相关的代码,只是数据结构知识的总结,依照严蔚敏老师的数据结构教材和我的20篇博客做的一个总结。首先,我想根据教材的目录走一篇大体的框架。大家在网上可以看到很多的网课,其中的目录也只是几个大的板块,没有什么新...原创 2019-12-17 09:17:13 · 1339 阅读 · 0 评论 -
数据结构之线性表
前言:本部分主要是有顺序表和链表,由于顺序表相对来说比较简单,而且其操作形式和链表也差不多,这里我重点学习链表,其中(带头结点的)单链表是基础,所以讲解较多,循环链表和双向链表简单涉及。基本操作这里主要是(1)初始化(2)取值(3)查找(4)插入(5)删除(6)创建单链表。一、单链表首先有结构体定义typedef struct LNode{ElemType dat...原创 2019-09-22 18:36:40 · 380 阅读 · 1 评论 -
数据结构线性表的应用(集合;多项式)
前言:*今天老师提到了集合的运算,我就想起来需要用线性表来进行集合的运算(虽然数组也可),前不久写了多项式运算的代码,但是核心部分的加减还是有点模糊,决定细致的再看一下(again)。1.我们先来说一般的集合并集的问题。即A、B表,将B中A不存的在元素插入A中,就得到合并的集合。*算法有: void MergeList(List &LA, List&LB){//将所有...原创 2019-10-14 15:19:21 · 911 阅读 · 2 评论 -
数据结构之栈和队列
前言:栈和队列是非常有用的结构,一个后进先出,一个先进先出。它们也有很多的应用,such as数制的转换、表达式求值、舞伴问题、迷宫求解、括号的匹配。这里给出数制的转换(十进制转换为其它进制,当然,其它进制转换也只可先转换为10进制,在进行相应转换,都可以用到栈),舞伴问题(简单的队列的使用),迷宫求解的话用到了回溯法和栈,其它博主写得要好很多,可以去看看。1.数制的转换/*功能:数制的转换...原创 2019-10-22 09:02:01 · 241 阅读 · 3 评论 -
数据结构KMP&BF算法
前言:串的匹配算法广泛应用在现在的很多方面,这里讲一下BF算法和KMP算法(重点)。一、BF算法,其原理就是循环进行比较,字符相同则下标都加一,不同主串回到i+1,子串回到1,重新匹配。算法如下:/*BF算法*/int Index_BF(SString S,SString T,int pos){//返回模式T在主串S中第pos个字符开始第一次出现的位置,若不存在则返回值为0//其中,...原创 2019-10-28 21:08:48 · 850 阅读 · 2 评论 -
你想知道的二叉树基本操作
前言:二叉树的学习结束了,还是决定把基础的知识在巩固一遍,最好的方法就是写程序了。代码附上,有二叉树的创建先序遍历,返回节点,按层次遍历。嘻嘻#include<iostream>#include<stdlib.h>#include<queue>#include<math.h>#include<iomanip>using na...原创 2019-11-11 09:01:37 · 246 阅读 · 1 评论 -
哈夫曼树(创建;编码;译码)
前言:首先感谢这博主的思路,谢谢,再次感谢。在哈夫曼树结构指针时卡断了,看了这个博主的就会了,万分感谢!https://blog.csdn.net/qq_37787333/article/details/89160075相关概念:概念 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优...原创 2019-11-11 21:47:23 · 758 阅读 · 1 评论 -
你想知道的深度优先与广度优先算法(搜索引擎抓取)
前言: *搜索引擎主要的抓取策略就有深度优先搜索与广度优先搜索。这里我们来介绍数据结构图论的这部分知识。 *一、深度优先搜索 (Depth First Search,DFS)遍历类似于树的先序遍历,是树的先序遍历的推广。对于一个连通图,深度优先搜索遍历的过程如下。(1)从图中某个定点v除法,访问v。(2)找出刚访问过的定...原创 2019-11-20 12:42:11 · 1100 阅读 · 0 评论 -
一起来创建一个无向图吧!
前言: 创建图可是遍历的基础呢,虽然写了广度优先遍历()和深度优先遍历(DFS),但是自己对于创建图这一块还是想再来一遍(once again?),基础也是很重要的。 我们都知道图的储存结构表示有多种:邻接矩...原创 2019-11-26 09:25:40 · 5740 阅读 · 2 评论 -
啥?移动公司要建立通信网(普里姆算法&克鲁斯卡尔算法)
前言:假设要在n个城市之间建立通信网络网,则连通n个城市只需要n-1条路线,这时,自然会考虑到这样一个问题,如何在最节省经费的前提下建立这个通信网。所以就要提到我们今天的主角,最小生成树的算法(Prim&Kruskal)。后面附上演示代码哦!!!小知识:首先我们要知道一个概念MST,用自己的话来说就是最小生成树里面一定包含了具有最小权值的边,这个很好理解。那么具...原创 2019-11-27 09:32:20 · 794 阅读 · 0 评论 -
别说了,世界那么大我想去看看!(最短路径-迪杰斯特拉算法&弗洛伊德算法)
前言: 一直想去外面的世界看看,中国城市那么多,那么美,怎么样才可以用最少的钱,最短的时间游遍我想去的城市呢?(我在做梦?不不不!迪杰斯特拉算法和弗洛伊德算法来了) 这两个算法有着广泛的用途,让我们来康康:(***后附代码演示哦!!!*** )![在这里插入图片描述](http...原创 2019-11-27 11:06:31 · 577 阅读 · 3 评论 -
从搬砖小工到工程师?(拓扑排序-AOV&AOE-关键路径)
前言: 为了去世界看看,我决定去搬砖赚钱(上一篇博客有提到哦),这个时候老板走过来,给了我一张图,问我最早什么时候可以完工,只要回答出来,我就是“包工头啦”。学过算法的我脑子里突然浮现出拓扑排序的影子,然后一顿操作?(哈哈) 让我一起学习拓扑排序和关键路径吧!一、拓扑排序(AO...原创 2019-11-27 11:53:39 · 363 阅读 · 0 评论 -
六度空间理论验证
前言: 六度空间理论大家都知道,就是任何两个人之间只需要不超过6个人即可联系。那么我们看看代码:#include<stdio.h>#include<iostream>#include<string>#include<string.h>#include<algorithm&g...原创 2019-11-27 15:00:14 · 2268 阅读 · 2 评论 -
图的深度优先搜索演示(邻接表存储结构)
前言: 之前也有发这个的,但是那个是用邻接矩阵写的,虽然二者本质也差不多,但是还是要联系一下邻接表的存储。(嘻嘻)#include <iostream>using namespace std;#define MVNum 100 //最大顶点数typedef char VerTexType; //假设顶点的数据类型为字符型//---------...原创 2019-11-30 10:12:41 · 843 阅读 · 0 评论 -
查找1—线性表的查找(顺序;二分;分块)
提前看目录1、设置监视哨的顺序查找2、折半查找3、分块查找1、设置监视哨的顺序查找普通的顺序查找就是利用循环遍历,例如n个数据查找,利用for(i=n;i>0;i--)循环,在进行if语句的判断,我们会发现每一次都会执行i>0的判断,而实际上只要存在这个元素,都是满足这个条件的,所以这就增加了时间的复杂度。因此就有了设置监视哨的顺序查找,简单来说就是将n[0]存...原创 2019-11-30 11:33:21 · 900 阅读 · 0 评论 -
查找2—树表的查找(二叉排序树;平衡二叉树;B树)
前言:查找部分的知识就是线性表的查找,树表的查找和散列表的查找。这里我们就来看看树表查找的知识。首先来看一下目录,看看我们本片博客的基本内容:一、二叉排序树首先,我们要讲二叉排序树的定义。书上或者其它资料上给出的二叉排序树的定义是递归的。用自己的话来总结就是,首先二叉排序树,根节点的值比左子树小,比右子树大。而且它的子树也满足这个规则(有一个重要的性质就是中序遍历一颗二叉排序树可以得到一个...原创 2019-12-10 17:47:05 · 508 阅读 · 0 评论 -
查找3—散列表的查找
前言: 这是查找这个知识点的最后一个部分,个人感觉这部分真的很好理解,就简单的逻辑思维,不需要绕弯,基本上就可以解决大部分的题目。合理的应用查找的总体效率也是很高的。主要说三个模块的事情:构造方法,处理冲突方法,查找。 那么引入一下,前面我们说了顺序表的查找、树表的查找,但是我...原创 2019-12-11 09:31:14 · 568 阅读 · 0 评论 -
排序1—插入排序
前言: 让我们开始排序的学习吧,首先我们先理解一下插入排序的基本思想:每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,知道所有待排序记录全部插入为止。(这个可能会和选择排相似,但是那个是设置最大或最小,然后依次找到最大或最小插入到特定位置,而选择依次比较后移或前移,不要混淆哦)。一、直接插入排序&nb...原创 2019-12-11 10:17:47 · 420 阅读 · 0 评论 -
排序2—交换排序
前言: 我们还是老规矩,先看看交换排序的基本思想:两两比较待排序记录的关键字,一旦发现两个记录不满足此需要求时则进行交换,知道整个序列全部满足要求为止。是不是一想到这个就想起来最简单最先接触的冒泡排序呢?一、冒泡排序 冒泡排序是一种最简单的交换排序方法,它通过两两比较相邻记录的...原创 2019-12-11 10:51:46 · 310 阅读 · 0 评论 -
排序3—选择排序
前言: 本来应该早一些跟新这篇博客的,但是最近有一些小烦恼耽搁了,不不不,学习还是不能停啊。那么先来预告一下我们要说什么呢?这里我们要说的首先是“简单选择排序”,然后你观察一下前面的博客就会发现,排序还是查找,都是有一个递进优化的趋势,所以之后就是优化版的“树形选择排序”,然后是更优化的“堆排序”。那么我们开始吧!一、简单选择排序【...原创 2019-12-15 16:29:34 · 401 阅读 · 0 评论 -
排序4—归并排序与基数排序
前言: 这篇博客应该是排序算法的最后一篇了,由于归并排序内容较少也比较好理解,基数排序也是很好理解的,所以就将它们一起写在一篇博客上了。另附一点外部排序的知识嘻嘻。一、归并排序概念:归并排序就是将两个或两个以上的有序表合成一个有序表的过程。将两个有序表合成一个有序表的过程称为2-路归并,当然啦,还有3-路归并以及其他的多路归并,只是这...原创 2019-12-15 16:53:48 · 753 阅读 · 0 评论