🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:2023年华为云十佳博主,2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
线性结构是指数据元素之间存在一对一的关系,即除了第一个和最后一个数据元素之外,其他数据元素都只有一个直接前驱和一个直接后继。线性结构包括以下几种:
线性结构是指每个元素最多只有一个出度和一个入度,表现为一条线状。线性表是一种特殊的线性结构分为顺序表和链表。
在线性结构中,除了顺序表和链表,还有一些其他的线性结构,如栈和队列。栈是一种特殊的线性表,只能在表的一端进行插入和删除操作,遵循先进后出(LIFO)的原则。队列也是一种特殊的线性表,只能在表的一端进行插入操作(队尾),在表的另一端进行删除操作(队头),遵循先进先出(FIFO)的原则。
线性结构中元素在计算机内存中的存储方式,主要有顺序存储和链式存储两种方式。
在空间方面,链表需要额外存储指针,导致空间浪费。
在时间方面:
在上图中p所指向的节点后插入s所指向的节点,操作为:
s->next=p->next;
p->next=s;
在单链表中删除p所指向节点的后继节点q时,操作为:
p->next=p->next->next;
free(q);
栈、队列和循环队列是常见的数据结构,用于存储和操作数据。
在循环队列中,头指针指向第一个元素,尾指针指向最后一个元素的下一个位置。当队列为空时,头尾指针相等;当队列满时,头尾指针也相等,无法区分。因此,一般会将队列空出一个元素位置,这样队列满的条件就是尾指针的下一个位置等于头指针。考虑到循环队列特性,需要使用最大元素数取余运算来实现循环,即(tail + 1) % size = head
。循环队列的长度可以通过(Q.tail - Q.head) % size
公式得到。另外,优先队列是一种特殊的队列,其中的元素被赋予了优先级。在访问元素时,具有最高优先级的元素最先被删除。优先队列常使用堆来存储元素,因为堆的顺序不是按照元素在队列中的顺序来决定的。
术语 | 定义 |
---|---|
空串 | 长度为0的字符串,没有任何字符。 |
空格串 | 由一个或多个空格组成的串,空格是空白字符,占一个字符长度。 |
子串 | 串中任意长度的连续字符构成的序列称为子串。含有子串的串称为主串,空串是任意串的子串。 |
算法 | 定义 |
---|---|
模式匹配算法 | 子串的定位操作,用于查找子串在主串中第一次出现的位置的算法。 |
基本的模式匹配算法 | 也称为布鲁特一福斯算法,其基本思想是从主串的第1个字符起与模式串的第1个字符比较,若相等,则继续逐个字符进行后续的比较;否则从主串中的第2个字符起与模式串的第1个字符重新比较,直至模式串中每个字符依次和主串中的一个连续的字符序列相等时为止,此时称为匹配成功,否则称为匹配失败。 |
KMP算法 | 对基本模式匹配算法的改进,其改进之处在于:每当匹配过程中出现相比较的字符不相等时,不需要回溯主串的字符位置指针,而是利用已经得到的“部分匹配”结果将模式串向右“滑动”尽可能远的距离,再继续进行比较。 |
KMP算法相比于基本的模式匹配算法差别:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。