- 博客(13)
- 收藏
- 关注
原创 【数据结构】【二叉树的基本操作】【二叉树的遍历】
目录二叉树的构造:输入二叉树的先序遍历,空子树用#代替前序遍历(递归、非递归)中序遍历(递归、非递归)后序遍历(递归、非递归)层次遍历二叉树的深度、结点完整代码如下二叉树需要明确的是其左右子树的位置是不可改变的;下面是一些二叉树的基本操作:二叉树的构造:输入二叉树的先序遍历,空子树用#代替Bitree Createtree(Bitree T) //根据先序遍历的序列构造二叉树{ char s; cin >> s; int i = 0;.
2022-05-11 12:07:21 287
原创 【字符串匹配算法】暴力匹配算法、KMP算法[next数组]、改进的KMP算法[nextval数组]
暴力匹配算法是指若i=1指向主串的首地址,j=1指向模式串的首地址,此后则开始匹配 i、j 所指向的对应字符是否匹配,若匹配则匹配下一个对应字符,反之,主串的i指向第一次匹配的下一个字符,即 i=2,模式串j指向其首地址。重复上述步骤;KMP算法KMP算法与暴力匹配算法最大的不同就是主串的指针 i 不需要回溯,KMP算法中最重要的就是next数组,next数组所求解的即第j个字符的前j-1个字符组成的字符串的最大相同前后缀+1;改进的KMP算法改进的KMP算法其本质上就是对于next数组
2022-05-08 11:03:01 303
原创 【串】字符串的定义与基本操作,顺序存储
串是由零个或多个字符组成的有限序列;子串是串中任意多个连续的字符组成的子序列;【注】空格串不是空串【注】关于串的查找,会单独发一篇文章具体代码如下:#include<bits/stdc++.h>using namespace std;#define Maxsize 100typedef struct { char ch[Maxsize]; int length;}Sstring;void Initstring(Sstring& S) //初始化,这里为
2022-05-04 19:51:27 189
原创 【栈】中缀表达式求值(简易计算器)
这里介绍中缀表达式求值的两种方法:(1)、先将中缀表达式转化为后缀表达式,再利用后缀表达式求值算法计算,这里可看之前的文章,中缀表达式转化为后缀表达式和后缀表达式求值;(2)、利用栈来实现,这里需要两个栈:数据栈和操作符栈,依次扫描字符串,遇到数据就压入数据栈中,遇到操作符,则判断其与操作符栈栈顶元素的优先级,这里可参考文章里的判断方法:中缀表达式转化为后缀表达式;方法(2)的具体代码如下:(代码多位数运算存在bug,暂时没修改,大佬可以评论区修改)#include<bits/std
2022-05-01 19:17:56 1075 1
原创 【栈】中缀表达式转为后缀表达式
实现的问题:输入一个中缀表达式,转换为对应的后缀表达式,并输出;【注】这里所输入分中缀表达式字符间无空格,若有空格,请自行修改代码【注】中缀表达式转后缀表达式,基本思想为,扫描遍历所输入的字符串,遇到数字则直接输出,遇到字符则要相应判断:(1)若为‘(’,则直接入栈;(2)若为')',则将栈顶元素输出,直到栈顶元素为‘(',最后将左括号出栈但并不输出【注】后缀表达式中不应该出现括号【注】 ;(3)若为运算符,则判断其与栈顶元素的优先级大小,若栈顶元素优先级较大,则输出比此时操作符优先级大
2022-05-01 15:16:42 610
原创 后缀表达式求值——利用栈来实现
首先需搞懂什么是后缀表达式,这个可以找一些视频会更容易理解,然后下面是具体的代码实现:操作数在0-9之间且输入的字符串无空格,如“897*+63/+”,代码如下:#include<bits/stdc++.h>using namespace std;int jisuan(int a, char c, int b){ switch (c) { case '+':return a + b; case '-':return a - b; case '*':r
2022-04-30 16:47:50 331
原创 【栈】括号匹配问题——利用栈来实现
目录括号匹配失败的几种情况:代码实现如下,可根据需要改定:括号匹配失败的几种情况:1、左括号单身:匹配完成后栈内还存在左括号;2、右括号单身:匹配完成后,栈空,右括号无与之匹配的左括号;3、左右括号不匹配:右括号的栈顶不为与之匹配的左括号;代码实现如下,可根据需要改定:#include<bits/stdc++.h>using namespace std;/*stack<int> s;stack< int, vector<in
2022-04-30 14:01:31 399
原创 带头结点的链式队列的基本操作
队列队列也是一种受限的线性结构,只能在头出,尾进,如下图为其存储模式,一定要将指针方向搞明白了,因为出队是在队头操作,出队后我们需要明白下一个是谁就必须知道出队前下一个是谁,这样来看就是队头指向队尾了,而头结点还是只是一个特殊结点,无具体的data具体代码实现有特殊需要可自行修改#include<bits/stdc++.h>using namespace std;typedef struct Linknode { //定义队列结点 int data; struct
2022-04-27 19:25:37 980
原创 【数据结构】循环队列的实现,顺序实现
顺序实现的循环队列只是逻辑上的循环队列,要与链式的区别开来具体的函数类型可根据需要自行修改,这里采用bool只是方便#include<bits/stdc++.h>using namespace std;#define Maxsize 10typedef struct Queue { //循环队列,牺牲一个单元来区分队空和队满,体现为Q.front == (Q.rear + 1) % Maxsize int data[Maxsize]; int front, rear; //
2022-04-25 17:05:04 361
原创 【数据结构】栈的顺序存储实现各种操作,顺序栈
顺序栈的实现与顺序线性表类似,不过区别在于栈是一种受限的线性表,必须先进后出,本章我们来实现顺序栈的基本操作,关于链栈的基本操作,可看
2022-04-25 15:46:44 991
原创 【链栈】——不带头结点
链栈:栈是后入先出(Last IN First Out,LIFO),其开始指针总是在栈顶的目录链栈:栈是后入先出(Last IN First Out,LIFO),其开始指针总是在栈顶的类型定义初始化入栈出栈打印栈main函数类型定义#include<bits/stdc++.h>using namespace std;typedef struct Linknode { int datd; struct Linknode* next;}*Lin
2022-04-24 19:23:09 654
原创 带头结点的单链表的基本操作
首先,对于单链表来说,带头结点比不带头结点的好处是很大的,体现在对其的基本操作中,这里,特别说明下,头结点可以看做是一个标志,并没有具体的数值;#include<bits/stdc++.h>using namespace std;typedef struct LNode{ int data; struct LNode* next;}LNode,*Linklist; //LNode*强调这是一个结点,Linklist强调这是一个链表,两者本质上是一样的//初始化vo
2022-04-24 18:40:59 1608
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人