- 博客(10)
- 收藏
- 关注
原创 从0开始学习Java到制作一个有界面显示的简易计算机
首先,写这篇博客的目的是:1.简单回顾这几天学到的知识;2.给那些想自学Java基础的小伙伴们一些小小的建议。(建议写在最后)首先,我得声明在此之前我都没有学习Java的想法,也没有什么Java基础,有的只是一些c,c++和一丢丢数据结构基础,而为什么突然间开始自学Java,这一切的一切得从报名参加学校的物联网实验室说起。加入实验室需要面试和完成他们给出来的一堆task里面的一项,鉴于我面试结果比较差(也就是代码题没能做出来O-O。。。别问,问就是菜)学长推荐我做那个用Java写一个计算器小程序的题,因此
2020-07-25 17:32:59
903
原创 哈夫曼树与哈夫曼编码以及解码
先来一张图,看看程序的效果OvO怎么样,484很心动??放心,我是不会告诉你我把完整代码都放在最后面了d咳咳,回归正题=_=接下来是正文哈夫曼树即是带权路径最小的二叉树可以看出,哈夫曼树的特点是1.权值越大的叶子节点靠根节点越近,越小的越远;2.只有度为0(叶子节点)和度为2(分支节点)的节点,不存在度为一的节点;(这一特点很重要)构建哈夫曼树可以分为三个步骤,选取,合并,删除与加入首先选取权值最小的节点2和3,再将它们的权值加起来作为其父节点的权值,最后将合并后的新节点加入原来的集
2020-07-22 16:23:13
5900
9
原创 中序线索二叉树
线索化二叉树,实质上就是将空闲指针充分利用起来,使其保存二叉树的某种遍历序列,而中序线索二叉树则保存的是中序遍历为了实现这一操作,我们对二叉树的节点结构做了一点改变,加入左右标志Ltag,Rtag,用来标志节点左右孩子是否为空template<typename T>struct Binode { T data; Binode<T>* Lchild; Binode<T>* Rchild; int Ltag, Rtag;};在遍历过程中,访问当前结点b
2020-07-22 15:09:28
1466
原创 二叉树的前序,中序,后序遍历非递归算法(包含二叉树的建立和层序遍历)
相比祖传的递归算法,非递归算法会麻烦很多,尤其是后续遍历的非递归算法,这些算法都借助了栈的数据结构,理解上的问题这里不多讲,我在代码里都加了较多注释,大家放心看便是头文件:#ifndef BITREE_H#define BITREE_H#include<iostream>#include<string>#include<stack>using namespace std;const int SIZE = 100;template<typena
2020-07-21 22:29:31
223
原创 根据前序和中序遍历建立二叉树,并输出后序遍历
这类问题利用递归比较方便首先我们需要了解前序和中序遍历的结构,例如图中二叉树的前序遍历为:ABDGCEF,中序遍历为:DGBAECF根据前序遍历,我们可以确定该二叉树的根节点为A,再通过中序遍历中A的位置,可以确定DGB为该二叉树的左子树,ECF为右子树根据这个逻辑,每次在前序遍历中读取一个节点,再在中序遍历中找到他所在的位置,便可以确定该子树的左子树和右子树及其节点数。下面是具体的代码:#include<iostream>#include<string.h>u
2020-07-21 21:55:29
3516
1
原创 BF算法与KMP算法
BF算法与KMP算法都是用来查找主串中子串的位置,也就是模式匹配。BF算法的简单粗暴,缺点是每趟匹配不成功时,存在大量回溯,导致程序效率低下,而KMP算法充分利用了成功匹配部分的结果,保证了主串游标不回溯,通过模式串向右滑动代替模式串游标回溯,大大提高了程序运行效率。简单的了解了一下BF和KMP算法的作用和优缺点后,我们先来看一下具体的代码和细节先看BF算法(这个算法比较简单,就不多说了直接上代码)#include<iostream>#include<string.h>u
2020-07-21 16:20:06
3452
2
原创 链队列__QwQ__
链队列最大的优点便是不用担心上溢,因此也不存在假象溢出,基本语法和链栈大同小异没看过的朋友可以参考一下之前的链栈也没什么特别的,直接上代码吧O=O,一些细节上的问题已经注释好了#include<iostream>using namespace std;template<typename T>struct Node{ T data; Node* next;};template<typename T>class LinkQueue{
2020-07-18 12:04:21
172
原创 循环队列
循环队列在顺序队列的基础上解决了假象溢出的问题,其他操作并没有太大改变。关于假象溢出由于采用的是顺序储存结构,这里的循环并不是真正意义上的收尾相连,而是通过对rear和front指针的移动取余的方法来实现rear = (rear + 1) % queuesize;//queuesize是队列长度具体代码如下头文件#include<iostream>using namespace std;const int queuesize = 10;template<typena
2020-07-18 11:12:02
156
原创 链栈
链栈的基本操作与顺序栈一致,但是实现方法有较大差异首先是在成员变量上,链栈中只包含了一个top指针(主要原因是链栈是动态存储的,在程序运行过程中给需要的变量分配内存,而顺序栈是静态的,内存空间已经划分好了)template<typename T>class LinkStack //链栈类{ Node<T>* top;public: LinkStack(); ~LinkStack(); void Push(T Data); vo
2020-07-17 22:23:45
179
原创 数据结构之顺序栈
栈是基本的数据结构之一,利用一维数组或链表作为储存结构,实现入栈,出栈,读取栈顶元素和判断栈是否为空等操作。与线性表最大的不同之处是,栈只允许在一端进行插入和删除操作。顺序栈的数据结构很简单,变量top,用来记录栈顶位置,初始化为-1,数组data用来储存数据。template<typename T>class seqStack{ T data[MAX_SIZE]; int top;public: seqStack(); ~seqStack() {}
2020-07-17 16:20:53
294
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人