数据结构与算法
文章平均质量分 75
小光学嵌入式
博主所有代码资料均可在小光嵌入式交流群(qq①群群号:737327353,②群群号:535712534)获得哦!
展开
-
[leetcode]剑指offer(C++版题解)
剑指offer第一天剑指 Offer 09. 用两个栈实现队列剑指 Offer 30. 包含min函数的栈有待更新。。。。第一天剑指 Offer 09. 用两个栈实现队列->点这里进入leetcode这道题的意思就是让我们使用两个栈实现一个队列,简单复习一下:栈:先进后出(栈顶进出元素)队列:先进先出(队列头出元素,队列尾进元素)我们会发现栈可以做到队列尾进元素,但是如何让栈底出元素是一个问题我们会想到将一个栈的元素依次出栈放到另外一个栈中的时候,他的元素是不是会倒过来,例如:原创 2022-04-12 18:18:12 · 2608 阅读 · 0 评论 -
C++ STL 备战比赛整理资料
文章目录C++ STL一、string二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入C++ STL如果想取得一个好成绩,一个好的编程语言是必不可少的.原创 2021-11-18 23:18:27 · 2397 阅读 · 2 评论 -
(九)二叉树的建立与遍历方法(c语言)(附代码与调试)
一.二叉树首先我们聊一聊什么是二叉树,二叉树就是n个节点的有限集合,该集合或者空集(称为空二叉树),或者由一个根节点和两课互不相交的分别称为根节点的左子树和右子树的二叉树组成。一看这,嗨哟,挺复杂,其实我们只要抓住它的特点就行了,二叉树嘛,①他的每个节点最多有两颗子树,我们可以理解为二胎政策,一个家庭最多有两个孩子,②很重要的一个就是他的左右子树是有顺序的,不能颠倒,这个我们可以理解为家里的两个孩子,一个是哥哥,一个是弟弟,哥哥和弟弟不能混淆,③树中有一颗子树也要区分它是左子树还是右子树,这个和后面讲的原创 2021-09-04 11:07:13 · 2374 阅读 · 1 评论 -
(八)KMP算法解析
KMPKMP也就是朴素匹配算法的优化,加快了匹配效率。他的关键点就在于:问题是由模式串(字串)决定,而不是目标串决定。他的核心就在于:减少不必要的回溯回溯:当匹配时失配后应该用子串中的哪个元素继续和目标串匹配。匹配过程讲解例如:S为目标串,T为模式串(子串),对于朴素的BF算法来说,当匹配到第五个元素的时候,出现了失配的现象,那我们该如何解决,也就是减少不必要的回溯,通过我们的计算来减少:我们可以看到,当匹配到第五个元素的时候,如果是BF算法的话,大家都知道是要i2和j1匹配,但是我们可原创 2021-08-18 10:36:55 · 164 阅读 · 2 评论 -
(七)循环队列的基本函数实现
1.队列队列:一种先进先出的线性表,为什么是先进先出呢?因为它删除元素是在队头,而插入元素是在队尾,就像这样:我们每插入一个数据,队尾指针就向后移一位,每删除一个数据队尾指针就向前移动一位,如我们删除一个数据就得到下图:得到:但是这样我们会发现这样每次删除数据的时间复杂度就是O(n),那么有没有什么好的方法让它变得更快一点呢?这就出现了循环队列:2.循环队列循环队列不一样的地方就在于:删除元素时不移动队尾指针,而是将队头指针向后移一位,这样大大提高了时间复杂度。防止删除元素后前面空原创 2021-08-17 17:26:39 · 837 阅读 · 0 评论 -
(六)逆波兰计算器——中缀转后缀
中缀转后缀的规则:1)如果遇到操作数,我们就直接将其输出。2)如果遇到操作符,则我们将其放入到栈中,遇到左括号时我们也将其放入栈中。3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。注意,左括号只弹出并不输出。4)如果遇到任何其他的操作符,如(“+”, “*”,“(”)等,从栈中弹出元素直到遇到发现更低优先级的元素(或者栈为空)为止。弹出完这些元素后,才将遇到的操作符压入到栈中。有一点需要注意,只有在遇到" ) “的情况下我们才弹出” ( “,其他情况我们都不会弹出” (原创 2021-08-10 22:38:51 · 128 阅读 · 1 评论 -
(五)逆波兰计算器——后缀表达式的计算
下面的代码实现目标:实现对逆波兰输入的表达式进行计算支持带小数点的数据话不多说上代码:#include "Link_head.h"#include <stdlib.h>#include <stdio.h>#include <ctype.h>#define MAXBUFFER 10int main(void){ struct LinkStack* s = (LinkStack*)malloc(sizeof(LinkStack)); char c原创 2021-08-09 23:01:21 · 184 阅读 · 0 评论 -
(四)链栈的代码实现
不多废话啦直接上代码#define OK 1#define ERROR 0typedef int ElemType;typedef struct StackNode { ElemType data; struct StackNode* next;}StackNode,*LinkStackPtr;typedef struct LinkStack { LinkStackPtr top; int count;};int Push(LinkStack* s, ElemType e);原创 2021-08-09 20:29:27 · 308 阅读 · 0 评论 -
(三)顺序栈的代码实现
顺序栈因为在C语言中学过链表,我就不仔细讲了,(主要是不想再学一遍哈哈)直接从栈与队列开始吧!文章目录顺序栈一、栈是什么?二、栈的基本操作函数实现1.初始化操作,建立一个空栈2.入栈操作(push)3.出栈操作总结一、栈是什么?栈是一种后进先出的数据结构。例如:游览器,每点击一次后退都是退回到最近一次游览的网页。关键点:1.栈的元素必须先进后出。2.站的操作只能在这个线性表的表尾进行。3.对于栈,表尾称为栈的栈顶(top)表头称为栈底。二、栈的基本操作函数实现typedef int E原创 2021-08-08 20:57:13 · 1920 阅读 · 2 评论 -
(二)时间复杂度和空间复杂度
文章目录前言一、时间复杂度1. 分析方法2.实例分析3.常用时间复杂度所耗费时间从小到大:二、空间复杂度总结前言这里会主要给大家介绍时间复杂度的计算方法一、时间复杂度提到时间复杂度,第一时间想到的是算法,简单说,算法就是你解决问题的方法,而你用这个方法解决这个问题所执行的语句次数,称为语句频度或者时间频度,记为T(n)。1. 分析方法1.用常数一取代运行时间中的所有加法函数。2.在修改后的运行次数函数中,只保留最高项阶。3.如果最高项存在且不是1,则去除与这个项相乘的常数。4.得到的.原创 2021-08-07 20:35:00 · 200 阅读 · 0 评论 -
(一)什么是数据结构与算法
文章目录前言一、数据结构是什么?1.逻辑结构2.物理结构二、算法1.算法的五个特征:2.算法设计的要求总结前言这里会介绍数据结构与算法的基本含义,解释什么是数据结构与算法一、数据结构是什么?先用一个图来概括:数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构可以分为逻辑结构和物理结构,即对应上面计算机组织、存储数据的方式。1.逻辑结构逻辑结构:数据对象中数据元素之间的相互关系。逻辑结构可分为四种:集合结构、线性结构、树形结构、图.原创 2021-08-06 18:08:31 · 1662 阅读 · 1 评论