![](https://img-blog.csdnimg.cn/a6a611e499a04ac486e76eb2d39836c7.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 55
是用通俗易懂的语言,讲解博主对数据结构预算法的理解!
ZHE980121
数字IC设计/验证
展开
-
朴素和KMP模式匹配算法
一、朴素模式匹配算法原理子串的定位操作通常称做串的模式匹配。二、KMP模式匹配算法原理2.1 什么是KMP算法?KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,简称KMP算法。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。2.2 KMP算法与BF(暴力破解法)的区别三、程序代码//02模式匹配_KMP#原创 2021-10-14 13:19:46 · 212 阅读 · 0 评论 -
串(string)存储结构
一、串的定义串(string)是由零个或多个字符组成的有限序列,又名叫字符串。空格串,是只包含空格的串。注意它与空串的区别,空格串是有内容有长度的,而且可以不止一个空格。子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含字串的串称为主串。串的顺序存储结构——用一组地址连续的存储单元来存储串中的字符序列的。按照,预定义的大小,为每个定义的串变量分配一个固定床都的存储区。一般是用定长数组来定义的。串的链式存储结构——对于串的链式存储结构,与线性表是相似的,但由于串结构的特殊原创 2021-10-14 11:11:05 · 718 阅读 · 0 评论 -
队列(queue)链式存储
一、定义队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,称为链队列。为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端阶段,如下图所示。空队列时,front和rear都指向头结点,如下图所示。入队操作——其实就是在链表尾部插入结点出队操作——出队操作时,就是头结点的后继结点出队,将头结点的后继改为它后面的结点,若链表除头结点外只剩一个元素时,则需将rear指向头结点,如下图所示:二、程序代码//06链队列_LinkQueue#include "原创 2021-10-12 10:34:40 · 537 阅读 · 0 评论 -
队列(queue)顺序存储
一、队列的定义队列(queue)是指只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(Firsr In First Out)的线性表,简称FIFO。允许插入到而一端称为队尾,允许删除的一端称为队头。假设队列是 q=(a1,a2,…,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时。列在最后。二、程序代码//05顺序队列_Queue#include "stdio.h" #include "stdlib.h"原创 2021-10-12 10:01:22 · 406 阅读 · 0 评论 -
斐波那契函数
一、递归定义把一个直接调用自己或通过一系列的调用语句间接地调用自己地函数,称做递归函数。每个递归定义必须至少有一个条件,满足时递归不再进行,即不再引用自身而是返回值退出。二、斐波那契数列实现三、程序代码//04斐波那契函数_Fibonacci#include "stdio.h" int Fbi(int i) /* 斐波那契的递归函数 */{ if( i < 2 ) return i == 0 ? 0 : 1; return Fbi(i - 1) + Fbi原创 2021-10-12 09:15:39 · 3322 阅读 · 3 评论 -
栈的链式存储结构及实现
一、栈的链式存储结构把栈顶放在单链表的头部。另外,都已经有了栈顶在头部了,单链表中比较常用的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的。对于链栈来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间,如果真的发生,那此时的计算机操作系统已经面临司机崩溃的情况,而不是这个链栈是否溢出的问题。但对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实就是top=NULL的时候。二、程序代码//03链栈_LinkStack#include "stdio.h" #includ原创 2021-10-12 08:36:34 · 686 阅读 · 0 评论 -
两栈共享空间
一、两栈共享空间的定义数组有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的始端,即下标为0处,另一个栈为栈的末端,即下标为数组长度n-1处。这样,两个栈如果增加元素,就是两端点向中间延伸。关键思路:它们是在数组的两端,向中间靠拢。top1和top2是栈1和栈2的栈顶指针,可以想象,只要他们俩不见面,两个栈就可以一直使用。二、程序代码//02两栈共享空间_DoubleStack#include "stdio.h" #include "stdlib.h" #include "io.原创 2021-10-12 08:14:07 · 1768 阅读 · 0 评论 -
顺序栈存储
一、栈的定义定义——栈是限定仅在表尾进行插入和删除操作的线性表栈的插入操作,叫做进栈,也称压栈、入栈。如下图所示:栈的删除操作,叫做出栈,也叫做弹栈。如下图所示:二、程序代码//01顺序栈_Stack#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1#define ERROR 0#define TRUE 1原创 2021-10-11 11:03:49 · 108 阅读 · 0 评论 -
线性表静态链表存储
一、静态链表定义定义——数组的元素都是由两个数据域组成,data和cur。数据域data用来存放数据元素,游标cur相当于单链表中的next指针,存放该元素的后继在数据中的下标。我们对数组第一个和最后一个元素作为特殊元素处理,不存数据。通常把未被使用的数组元素称为备用链表。而数组第一个元素,即下标为0的元素的cur就存放备用链表的第一个节点的下标;而数组的最后一个元素的cur则存放第一个有数值的元素的下标,相当于单链表的头指针的作用,当整个链表为空时,则为02。如下图所示:举例:已将数据存入静态链表原创 2021-10-11 10:45:25 · 187 阅读 · 0 评论 -
线性表链式存储(单链表)
一、线性表链式存储概念定义——为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(既直接后继的存储位置)。我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称做指针或链。这两部分信息组成数据元素ai的存储映像,称为结点(Node)。二、程序代码//02线性表链式存储_LinkList#include "stdio.h" #include "stri原创 2021-09-30 11:01:16 · 420 阅读 · 0 评论 -
线性表顺序存储
一、线性表的顺序存储结构定义定义——线性表的顺序存储结构,指的是用一段地址连续的存储单元一次存储线性表的数据元素。地址的计算方法数据元素的序号和存放它的数组下标之间存在对应关系:假设占用的是c个存储单元,那么线性表中第i+1个数据元素的存储位置和第i个数据元素的存储位置满足下列关系(LOC表示获得存储位置的函数):二、程序代码//01线性表顺序存储_List#include "stdio.h" #include "stdlib.h" #include "io.h"原创 2021-09-30 09:43:17 · 1363 阅读 · 0 评论 -
详解栈区、堆区、全局区、文字常量区、程序代码区
一、概述C的内存基本上分为4部分:静态存储区、堆区、栈区以及常量区。他们的功能不同,对他们使用方式也就不同。在C++中内存分成5个区,分别是堆、栈、全局/静态存储区、常量存储区和代码区;内存四区是指:栈区,堆区,全局区,代码区二、基本概念1:栈区(stack)栈区:就是那些由编译器在需要的时候分配,在不需要的时候自动清除变量的存储区。里面的变量通常是局部变量、函数参数等。特点:由系统的编译器自动的释放,主要用来存放方法中的参数,一些临时的局部变量等,并且方法中的参数一般在操作完后,会由编译器自动原创 2021-09-16 21:08:13 · 1915 阅读 · 0 评论 -
数据结构与算法思维导图
数据结构与算法思维导图暑假期间总结的,内容都比较基础,可用作基础复习!文章最下方有思维导图PDF版本下载链接!再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。简介数据结构的基本概念基本概念和术语数据数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合数据元素数据元素是数据的基本单位,通常作为一个整体进行考虑和处理数据对象数据对象是具有相同性质的数据元素的集合,是数据的一个子集数据类型数原创 2021-09-15 20:08:45 · 876 阅读 · 0 评论