- 博客(20)
- 收藏
- 关注

原创 改造一个双向循环链表,使右链域保持原来的顺序,而左链域从小到大顺序排列。
本题在之前发布过,但发现方法略有复杂。本次将更新一下最简单的思想方法 。点击查看原题出处思想:改进:不需要对每个结点的左链域进行置空初始化,因为最后还是会重新赋值。只需要对头结点 L 初始化: L->prior = L;原方法:每次选出最小元素,采用尾插法排序,较为繁琐,而且指针变量太多。新方法:每次选出最大元素,进行头插法。这样代码更为简洁,同样可以实现从小到大排列附上全...
2020-03-05 11:10:33
1943
1

原创 C++二叉树计算带权路径长度(WPL)的算法
二叉树计算带权路径长度(WPL)的算法更多内容请访问点击我的主页题目 :二叉树的带权路径长度是二叉树中所有叶子结点的带权路径长度之和。给定二叉链表的存储的结点结构为leftweightrightweight存储的是叶子结点的非负权值。设计算法求二叉树的带权路径长度WPL。WPL = ∑ 叶子结点的权值 × 结点到根结点的分支个数 1例如:算法思...
2019-11-03 08:20:56
16468
3

原创 C++数据结构二叉树统计总结点个数,叶子结点个数,单分支结点个数,双分支结点个数。
很多书上其实都有提到和该算法。但是经过自己的学习我自己想到一个算法。算是结合了其中的优点吧。算法描述:该算法递归去统计结点个数。值得一提的是该系列算法都是统计根结点以下的符和条件的结点的个数进行了加和。免去的设置全局变量和void的类型的函数。int CountNodes(LBTree* lbt){ int n = 0; if (lbt != NULL) { ++n...
2019-11-02 08:29:25
3835

原创 C++已知先序遍历序列中序遍历序列建立二叉树;已知后序遍历序列中序遍历序列建立二叉树
如题,已知先序中序/后序中序建立一棵二叉树。 我们手工建树的时候,比如一个例子:先序序列:ADECFG,中序序列:DBEAFCG。首先我们都会从先序序列中找到第一个元素A,该元素也就是这个树的根。然后再在中序序列中找到一样的元素A,,这样会将中序序列分成两个子序列(DBE) (FCG),分别是左子树与右子树。然后将子序列再看成一棵树。显然这是一个递归的过程。所以只需要把首层的搞清...
2019-11-02 08:14:00
2573
原创 哈夫曼树/哈夫曼编码
本算法采用二叉链表来构造二叉树,并用递归算法求哈夫曼编码构造哈夫曼树概念:哈夫曼树为带权路径最短的二叉树构造过程:每次选出最小的两个顶点,分别作为左右分支,构造出父节点,父节点权值为两顶点之和,然后将其加入到顶点集合中,并删除之前取出的两个顶点。哈夫曼编码算法思想:通过递归,从根结点往每个叶子结点来进行编码。通过一个临时数组来按照左零右一存储下来,若遇到叶子结点,则将存储的路径作为该字符的编码。代码void CreateHuffmanTree(BinaryTree &T, .
2020-06-28 21:59:26
419
原创 十进制转为二进制
十进制转化为二进制转化规则一般十进制数有整数部分和小数部分组成,两个部分其转化规则是不相同的。因此首先把十进制数的两个部分分开来。整数部分:通过除二取余法将余数倒序记录下来,直到除到0小数部分:通过乘二取整法将整数正序记录下来。//十进制转化为二进制void Switch(float a){ int b = int (a * 100) % 100; int v = (a * 100 - b) / 100; //v为整数部分 float w = b * 1.0 / 100; //w为
2020-06-28 21:51:00
1088
原创 判断是否为完全二叉树
完全二叉树空树是完全二叉树对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。算法思想判断树是否是空树,若为空树则为完全二叉树若树为非空完全二叉树,则借助队列层序遍历二叉树(空分支也入队),若出队碰到空分支,则说明之前的结点都不为空,那么队列中的结点都应该是空分支。若不满足上述,则不是完全二叉树伪代码b...
2020-03-12 08:30:38
1357
原创 最小生成树算法——kruskal
如图,输出最小生成树的生成过程算法思想:每个边的权值进行从小到大排序然后从小到大添加到最小生成树中,若添加一个边后构成环路,则此边不能添加。直到每个顶点都加入到最小生成树中。需要一个结构体来存储 每个边的权值与始末顶点。再进行排序。struct { VexType head; VexType tail; ArcType lowcost;}Edge[MAXSIZE]; /...
2020-03-08 14:16:45
228
原创 java实现贷款计算器(工具类)
贷款相关内容请参考 等额本金与等额本息等额本息:每个月的还款金额相同等额本息法最重要的一个特点是每月的还款额相同,从本质上来说是本金所占比例逐月递增,利息所占比例逐月递减,月还款数不变,即在月供“本金与利息”的分配比例中,前半段时期所还的利息比例大、本金比例小,还款期限过半后逐步转为本金比例大、利息比例小,其计算公式为:每月还本付息金额 =[ 本金 x 月利率 x(1+月利率)贷款月数 ...
2020-03-05 23:25:46
5074
原创 循环队列入队出队判队空队满
循环队列:结构:typedef struct{ ElemType *data; //数据域 int front; //队头 int rear; //队尾 下标代替指针}SqQueue;初始化队列初始化队列让Q.front = Q.rear = 0 即可判队空判空 判断等式是否成立: Q.front == Q.rear判队满判队满 因为循环队列会空出来一个位置...
2020-03-05 23:02:09
2178
1
原创 C++数据结构链队出队入队
链队相关操作初始化队列入队出队#include "stdafx.h"#include <iostream>using namespace std;#define OK 1#define ERROR 0#define OVERFLOW -2typedef int ELEMTYPE;typedef int Status;typedef struct LNo...
2020-03-04 11:40:19
634
原创 单链表相关的基本操作(从文件中读入)
单链表相关的基本操作初始化单链表头插法建表尾插法建表插入元素删除元素判空表单链表倒置头文件:#ifndef _LINKLIST_H_#define _LINKLIST_H_#include <iostream>#include <fstream>using namespace std;#define OK 1#define ERROR ...
2020-03-04 11:11:33
1328
原创 顺序表相关基本操作(从文件中读取数据)
顺序表的基本操作初始化表建表增加元素删除元素遍历唯一化顺序表头文件:#ifndef _SQLIST_H_#define _SQLIST_H_#include <iostream>#include <fstream>using namespace std;#define OK 1#define ERROR 0#define OVERFLOW...
2020-03-04 11:01:27
4199
原创 顺序表循环左右移动n个单位
顺序表循环左右移动n个单位思想:如下图,比如需要循环右移两个单位,先整体倒置,再局部倒置即可。void Reverse(SqList &L,int low,int high) //倒置函数 整个表倒置low = 1 high = L.length{ while (low <= high) { L.r[0] = L.r[low]; L.r[low] = L.r[h...
2020-03-04 10:57:11
451
原创 数据结构多项式加法
typedef struct{ int Matrix; //系数 int Order; //阶}Item; //多项式的项typedef struct{ Item item[MAXSIZE]; int length; //多项式长度}Polynomial;Polynomial Add(Polynomial AH, Polynomial BH) //普通的合并{ P...
2019-11-14 10:31:51
357
原创 C++数据结构邻接矩阵基本操作集(自编)
邻接矩阵基本操作建立邻接矩阵CreateMGraph(MGraph &G, VertexType v[],EdgeType e[][MAXSIZE],int n)返回顶点下标getVertexidx(MGraph G, VertexType x)判断边是否存在Adjacent(MGraph G, VertexType x, VertexType y)某点所连接的所有点Ne...
2019-11-08 23:22:19
1651
原创 C++数据结构邻接表建表(通过数组建表)
邻接表建表(通过数组建表)描述:本方法无需区分有向图还是无向图,只是在计算边数的时候都统计了,如果是无向图除以二即可。数组赋值:VertexType v[5] = { 'A','B','C','D','E' };int e[5][MAXSIZE] = { {0,1,0,1,0},{1,0,1,0,1},{0,1,0,1,1},{1,0,1,0,0},{0,1,1,0,0} };实例图...
2019-11-07 22:02:14
384
1
原创 C++数据结构,判断图中是否存在边x,y
判断图中是否存在边<x,y>更多内容请访问个人主页1. 存储结构为邻接表时typedef char VertexType;typedef int EdgeType;typedef struct{ VertexType Vex[MAXSIZE]; //点表 EdgeType Edge[MAXSIZE][MAXSIZE]; //边表}MGraph;1.算法描...
2019-11-07 17:48:13
1062
1
原创 C++数据结构二叉树统计总结点个数,叶子结点个数,单分支结点个数,双分支结点个数。(markdown)
很多书上其实都有提到和该算法。但是经过自己的学习我自己想到一个算法。算是结合了其中的优点吧。算法描述:该算法递归去统计结点个数。值得一提的是该系列算法都是统计根结点以下的符和条件的结点的个数进行了加和。免去的设置全局变量和void的类型的函数。int CountNodes(LBTree* lbt){ int n = 0; if (lbt != NULL) { ++n; n +=...
2019-11-04 14:37:28
3074
1
原创 改造一个双向循环链表,使右链域保持原来的顺序,而左链域从小到大顺序排列。
// 这道题的算法是我自己编写而来的,我也是一名学生,如果有什么更好的方法,我们可以相互交流。 在我的算法中,我使用了一个宏定义MaxNum 表示最大的数,实现了对左链域从小到大排列。实现从大到小排列只需要把MaxNum改成Minmun即可。也是本算法最大的一个优点。好,话不多说,现在我来说一下自己的思想。先将所有结点的左指针全部清空。 定义3个指针,p(查找指针),q...
2019-10-21 07:18:01
1570
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人