算法
数据结构和算法实战
不自律的自律_input
踮起脚尖看世界!
展开
-
非递归二叉树先序遍历,一个深拷贝引发的bug
原创 2021-09-17 20:33:37 · 68 阅读 · 0 评论 -
栈和队列的应用
栈括号匹配数制转换中缀表达式求值中缀转后缀队列层次遍历原创 2021-11-29 16:48:50 · 109 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历算法流程图
图的存储结构:邻接表表示方法,适用于有向图和无向图图的遍历:从图的某顶点出发,访问图中所有顶点,并且每个顶点仅访问一次。图中可能有回路,遍历可能沿回路又回到已遍历过的结点。为避免同一顶点被多次访问,必须为每个被访问的顶点作一标志。为此引入一辅助数组, 记录每个顶点是否被访问过。有两种遍历方法:深度优先遍历和广度优先遍历算法(它们对无向图,有向图都适用)深度优先遍历:(可以用来判断图中是否存在环)思路:从图的某一顶点V0出发,访问此顶点;然后依次从V0的未被访问的邻接点出发,深度优先遍历图,直至原创 2021-08-08 11:15:18 · 6853 阅读 · 0 评论 -
穷举、贪心、动态规划
发原创 2021-11-29 08:25:58 · 75 阅读 · 0 评论 -
平衡二叉树的调整
先左后右先右后左原创 2021-11-29 09:36:23 · 97 阅读 · 0 评论 -
一网打尽数据结构中图相关的算法
一、基本存储二、基本操作图的遍历深度优先遍历在这里插入代码片广度优先遍历在这里插入代码片三、改造类将无向图的邻接矩阵存储转成邻接表存储在这里插入代码片原创 2021-10-22 11:20:33 · 101 阅读 · 0 评论 -
C语言实现,设计一个将所有奇数移动到偶数之前的算法
C语言设计一个算法实现将所有奇数移动到偶数之前算法思想:void quikpass(int a[],int s,int t){int i=s,j=t,k=r[s];while(i<j){while(i<j&&r[j]%2==0)j=j-1;//if(i<j){}while(i<j&&r[j]%2==0)i=i-1;//if(i<j){r[j]}r[i]=k;}...原创 2021-10-22 11:05:45 · 1318 阅读 · 3 评论 -
一网打尽数据结构中线性表链表的相关算法
目前还未开始写,后期会更新一、基本操作二、改造类链表合并两个有序链表将一个含有大写字母小写字母数字的链表按照元素类型分为三个链表在一个链表中删除多余的重复节点,使每个元素在线性表中进出现一次线性表...原创 2021-10-22 10:33:38 · 143 阅读 · 0 评论 -
全网最详细之一网打尽数据结构中与树相关的算法
目前还未开始写,后期会更新一、存储顺序存储链式存储二、遍历递归先序中序后序非递归先序中序后序(借助栈)层次遍历(借助队列)三、改造类算法统计二叉树中叶子(度为0)的结点个数统计二叉树中度为1(单分支)的结点个数统计二叉树中度为2(双分支)结点个数判断二叉树是否是二叉排序树(递归)思想:找出二叉排序树中值为key的节点(递归)思想:判断两棵二叉树是否同构(递归)思想:判断二叉树是否是完全二叉树(递归)思想:交换二叉树的左右子树:左原创 2021-10-22 10:24:32 · 137 阅读 · 0 评论 -
求一棵二叉树根到所有叶子节点的路径
//求路径的函数void LeavesPath(BitTree* tree, int level) { if (tree == NULL) return; Paths[level] = tree;//这句话就意味着,只要走到这里,这个子树的根就被记录下来 //求路径,意味着找到叶子节点,就输出 if ((tree->left == NULL) && (tree->right == NULL)) { //当我确定到已经从树根节点root走到了一个叶子节点,那么它以原创 2021-10-07 21:02:34 · 197 阅读 · 0 评论 -
根据前序、中序序列重建一棵二叉树的代码实现
//根据前序、中序重建二叉树BitTree* reConstructBinTree(int pre[], int startPre, int endPre, int in[], int startIn, int endIn) { //如果起始的下标大于结束的下标,那么就退出 if (startPre > endPre || startIn > endIn) { return NULL; } //前序找到根节点 BitTree* pNode = (BitTree*)mallo.原创 2021-10-07 20:09:24 · 87 阅读 · 0 评论 -
获取二叉树的所有叶子节点、获取全树深度与左右子树深度求解:递归
树的左右子树深度全树的深度//因为我们现在能够不重复,不遗漏获取每一个节点,只有前中后序3种方法,所以,我们首先先写出//先序递归获取树的深度int hight = 0;//它可以在多个函数之间共享//前序是根左右,我们把每一个树从root出发的树,可以看出左右两个子树//无论我们如何遍历,我们前进到每一个节点都是潜在的根节点。//我们可以认为每到一个新节点,就是到了一个新树,//如果说,我们对新节点的发现,我们就认为到了一个新层,那么我们累加//记录就可以了//我用level作为当前原创 2021-10-07 20:01:45 · 715 阅读 · 0 评论 -
判断两棵树是否相等与使用二叉链表法建立二叉搜索树
//判断两个二叉树是否相等//提问如果两个二叉树的前序遍历相等,能否说明,这两个树相等?//答案是否定的,只有这两个树的 A前序=B前序,A中序=B中序才可以。BOOL isEqualTree(BitTree* t1, BitTree* t2) { if (t1 == NULL && t2 == NULL) return TRUE; if (!t1 || !t2)//t1,t2一个空一个不空,肯定不相同 return FALSE; if (t1->data == t原创 2021-10-07 19:34:16 · 580 阅读 · 0 评论 -
二叉树镜像,交换左右子树
使用递归的思想实现原创 2021-10-07 19:21:54 · 74 阅读 · 0 评论 -
线性表之单链表
单链表1.插入2.删除原创 2021-10-03 20:58:21 · 71 阅读 · 0 评论 -
二叉树层次遍历算法
代码区原创 2021-09-27 20:33:48 · 6444 阅读 · 0 评论 -
红黑树代码
#include<stdio.h>//Key中的内容可能更复杂,比如字符串等。struct Key{ int value;};struct RBTNode{ Key key; int lcount; int rcount; RBTNode* lchild; RBTNode* rchild; RBTNode* parent; bool color;};class RBT{private: const static原创 2021-09-27 15:35:39 · 168 阅读 · 0 评论 -
排序算法介绍
排序原创 2021-09-25 10:25:05 · 69 阅读 · 0 评论 -
查找算法介绍
查找原创 2021-09-25 10:24:28 · 74 阅读 · 0 评论 -
哈夫曼树实现压缩文件
哈夫曼树实现文件的压缩原创 2021-09-23 08:36:38 · 402 阅读 · 0 评论 -
字符串BF和KMP匹配算法
#include <string.h>#include<stdio.h>/*BBC ABCDAB ABCDABCDABDE搜索词"ABCDABD"*///如果pattern存在org中,那么返回的是首次出现的org的角标//否则返回的是-1int index(char strOrg[], char strPattern[]) { int i = 0, j = 0;//i是用来推进strOrg,j是用来推进strPattern的 int k = -1;//k是用来原创 2021-09-23 08:31:34 · 62 阅读 · 0 评论 -
C语言之归并排序
#include <stdio.h>#include <stdlib.h>int arrarorg[] = { 49,38,65,97,76,13,27,49,55,4 };/*代排序的数组sr,存放排序的数组是trm:sr的长度,n是tr的长度目标:将sr[i....m]和sr[m+1,...n]归并为有序tr[i....n]*/void merge(int sr[], int tr[],int i, int m, int n) { int j, k; f原创 2021-09-23 08:18:07 · 79 阅读 · 0 评论 -
堆排序的实现
#include <stdio.h>int arrarorg[] = { 49,38,65,97,76,13,27,49,55,4 };//建立最大堆//n表示数组的元素位置,length表示数组长度void maxheap(int h[], int n, int length) { int l = 2 * n + 1; //从数组0开始,和从1开始的左右孩子标志 int r = 2 * n + 2; int max;//l,r,max都是数组角标 int temp;原创 2021-09-23 08:14:54 · 56 阅读 · 0 评论 -
C语言之冒泡排序
在这里插入代码片原创 2021-09-23 08:12:38 · 116 阅读 · 0 评论 -
C语言实现拓扑排序
AOV网原创 2021-09-23 08:02:53 · 317 阅读 · 0 评论 -
带括号的中缀表达式转后缀表达式
#include <stdio.h>#include "SeqStack.h"//对扩展开放,对修改封闭//修改一下运算符int Is_OperatorEx(char op) { switch (op) { case '(': case ')': case '+': case '-': case '*': case '/': return 1; default: return 0; }}int PriorityEx(char op) { switc原创 2021-09-22 17:37:41 · 311 阅读 · 0 评论 -
二叉排序树的存储结构和增删查改
顺序存储结构#include <stdio.h>//用顺序数组的形式,存储建立一个二叉搜索树/*1,我们根据完全二叉树的编号,我们做数组角标1存储输入的第一个元素2,得到根元素之后,我们开始建立这样的二叉树 若元素的值大于根节点,则将元素往根节点的右子节点移动,若此节点为空 那么,存入,否则,直到找到这个空位置 若元素的值小于根节点,按么则将元素往根节点的左子节点移动,直到找到 空位存储之注意,如何寻找节点的左右子节点呢?用左节点为父节点×2,右子节点为父节点×2+1,根原创 2021-09-22 09:13:23 · 354 阅读 · 0 评论 -
二叉树的非递归遍历算法
#include <stdio.h>#include <stdlib.h>typedef int datatype;typedef struct node { datatype data; struct node *left, *right;}BitTree;//添加辅助栈的结构:主要是用来保存树的节点//简言之,这个就是用来存树节点的栈typedef BitTree BitTreeNode;typedef int BOOL;#define TRUE 1#d原创 2021-09-22 09:03:06 · 126 阅读 · 0 评论 -
二叉树非递归遍历的经典求解
#include <stdio.h>#include <stdlib.h>typedef int datatype;typedef struct node { datatype data; struct node *left, *right;}BitTree;//*************************Begin*************//添加辅助栈的结构:主要是用来保存树的节点//简言之,这个就是用来存树节点的栈typedef BitTree Bi原创 2021-09-22 08:56:51 · 141 阅读 · 0 评论 -
哈夫曼树的构建和哈夫曼编码带权路径长的求解
#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct BTreeNode {ElemType data;struct BTreeNode* left, *right;}BTreeNode;//根据传入的数组a,其中n个元素作为其权值,构建一颗哈夫曼树,返回根节点BTreeNode* CreateHuffman(ElemType a[], int n) {int i, j;原创 2021-09-22 08:42:52 · 241 阅读 · 0 评论 -
C语言实现快速排序算法
#include <stdio.h>#define MAXSIZE 10 typedef int KeyType; typedef struct { KeyType key; // 关键字项 // int otherinfo; // 其它数据项} RedType; typedef struct { RedType r[MAXSIZE+1]; // r[0]闲置 int原创 2021-07-28 14:32:47 · 279 阅读 · 0 评论 -
C语言实现堆排序
visual C++ 下使用C语言实现堆排序#include <stdio.h>#define MAXSIZE 10 typedef int KeyType; typedef struct { KeyType key; // 关键字项 // int otherinfo; // 其它数据项} RcdType; typedef struct { RcdType r[MAX原创 2021-07-11 20:00:05 · 94 阅读 · 0 评论 -
C语言实现二路归并算法
C语言实现二路归并算法#include<stdio.h>//将有序的sr[i...m]和sr[m+1...n]归并为有序的tr[i...n]void merge(int sr[],int tr[],int i,int m,int n){ int j,k; for(j=m+1,k=i;i<=m&&j<=n;++k) if(sr[i]<sr[j]) tr[k]=sr[i++]; else tr[k]=sr[j++]; while(i<=m原创 2021-07-11 19:58:03 · 719 阅读 · 0 评论