- 博客(11)
- 问答 (1)
- 收藏
- 关注
原创 图的基本实现和DJS算法(Java实现)
图图是一种各个数据对象间存在多对多关系的数据结构图的接口Interfacepublic interface IGraph { void createGraph();//创建图 int getVexNum();//统计顶点数 int getArcNum();//统计边数 Object getVex(int v) throws Exception;//返回v位置对应的顶点 int locateVex(Object vex);//查找vex在图中的位置 int firstAdjVex(int v
2021-12-13 23:28:29
872
原创 AOV网中的拓扑排序(Java实现)
拓扑排序问题引入在实际生活中,有很多的活动安排是存在先后顺序的关系的,要先做完一件事才能做后面一件事,或者说通过这样安排达到的效果会更好,就像大学当中的课程安排,举个栗子,计算机专业的同学一般是先学了离散数学以后再学数据结构,因为在离散数学中需要学习树,图的相关概念和一些相关的算法(也就是离散数学中的解题),那么如何解决活动的安排问题呢?拓扑排序是一个很好的选择AOV网用顶点表示活动,用边表示活动之间的先行关系的有向网即Activity on vertex networkAOV网特点:AOV网
2021-12-07 20:51:15
615
原创 栈的应用之中缀表达式转后缀表达式及后缀表达式的计算
问题引入:在计算机中,后缀表达式的运行效率要高于中缀表达式,而中缀表达式转后缀表达式可以通过栈来实现,那么什么是中缀表达式和后缀表达式呢?中缀表达式中缀表达式其实就是我们平常使用的一些计算的式子,比如a+b,ab,或者再稍微复杂一点的a+bc-d/e后缀表达式后缀表达式是将操作符至于操作数之后的一种式子,运算规则是遇到操作符将前面两个操作数进行相应的运算(一般情况下操作符是二目运算符,这里的也只以二目运算符为例),比如上面的中缀表达式转换成对应的后缀表达式,分别是:ab+,ab*,abc*+de/
2021-11-14 22:59:59
567
原创 队列及优先队列(Java实现)
引入在我们的日常生活中,有许多排队的情形,像在食堂排队打饭,在购票窗口排队购票等等,像这种满足成员元素先进先出特性的问题可以抽象成队列问题(不考虑队尾或者队伍中间的人由于种种因素中途离开的情形),那么什么是队列呢?队列(Queue)队列也是线性表的一种,和栈一样是一种特殊的线性表,只不过队列满足的特点是先进先出(FIFO或者FCFS–>First Come First Service),而后者的特点是先进后出(FILO)。ADT作为一个队列,它要实现的基本功能如下:置空,判空,获取队列长度,
2021-10-24 21:21:02
696
原创 栈的应用之分隔符匹配问题(Java实现)
问题引入在Java的表达式中分隔符有左分隔符("(","{","[","/*")和 右分隔符(")","}","]","/"),那么我们应该怎样编写一个程序来判断一个字符串表达式中的分隔符是否完全匹配呢?算法分析在解决分隔符匹配问题中常见的错误思想:通过两个计数器分别记录左分隔符和右分隔符的个数,如果扫描完字符串两个计数器记录的值相等则认为分隔符是匹配的。通过这种算法得到的结果其实很有可能是错误的,因为这种算法并没有考虑分隔符匹配具有的先后性,像"))(("这样的字符串得到的结果也会是匹配的,但是很
2021-10-16 12:22:14
447
1
原创 栈——初步认识(Java实现)
今天来学习一下一个比较常用的数据结构——栈栈栈其实就是一个线性表,只不过比较特殊,特殊在它的插入删除操作都只在栈顶进行,符合后进先出(LIFO)的规则ADT(抽象数据类型)一个栈基本要实现的功能有哪些呢?一个栈要实现的基本的功能有:将栈置空,判断栈是否为空,获取栈的长度,获取栈顶元素,出栈(同时获取出栈的栈顶元素)知道这些就定义栈的接口IStack了:public interface IStack { public void clear();//置空 public boolean isEm
2021-10-16 11:43:49
319
原创 Java实现单链表
结点(Node):结点是链表中的基本组成单位,每一个结点包含两个部分:数据域和指针域(在Java中就是引用)。其中数据域存放当前结点的数据,而指针域存放一个指针(引用),指向下一个结点。这样一个一个的结点通过指针(引用)链接起来就构成了链表。Node类实现://结点public class Node { //数据 public int date; //下一个结点 public Node next; //date传值的构造方法 public Node(int date) { this
2021-04-13 19:42:59
321
2
原创 Java堆排序浅析
堆排序:堆排序的基本思想:将一组数据建成一个堆(以大顶堆为例:每个父节点都比左右孩子上的数大 ),然后将堆顶(序列中最大的数)与序列最后一位的元素换位,再对换位后的堆(堆的大小也就是序列长度 -1)进行调整,使之始终满足大顶堆结构,直到序列长度为1结束。复杂度:时间复杂度:最好,最坏,平均都是O(nlgn) :建堆时间复杂度为O(n):过于复杂,这里不作深究,有兴趣的朋友可以自己搜索,堆的调整时间复杂度O(lgn):每次进行堆的调整涉及左孩子和右孩子两个数据空间复杂度:需要额外常数级:O(1)的空
2021-04-10 21:31:04
279
1
原创 Java希尔排序浅析
希尔排序:希尔排序又叫缩小增量排序,是插入排序的一种(或者说是插入排序的改进版)。算法描述:希尔排序通过将一组数据按照一定的增量对数据进行分组,对分组后的每组数据进行插入排序,实现了相隔较远的数据之间的排序,在不断进行插入排序的过程中,整组数据越来越接近有序,最后增量为1时,就是一次完整的插入排序了。可能有人会问,既然都是插入排序,为什么还要特地将希尔排序分出来呢?这是因为插入排序在对一组有序程度越高的数据进行排序时效率越高,所以希尔排序的时间复杂度突破了O(n2),而且希尔排序的时间复杂度会随着增量取
2021-04-07 12:36:24
770
9
原创 Java实现快速排序
快速排序是一种比较高效的比较类排序算法,相比冒泡排序,快排中的每一轮比较是跳跃式的,为什么说是跳跃式的比较呢?这个问题待会再细说。快速排序的基本思想是:通过一轮比较将基数定位(一般按从小到大),并将数据一分为二,基数前面的数均比基数小,基数后面的数均比基数大,之后再对这两组数据分别继续进行比较。这就回到了刚才的问题:冒泡排序每一轮比较只是将比较区相邻两个数进行比较,对比较区最大的数据定位(大数沉淀,小数冒泡,一般按从小到大排序),而快速排序每一轮比较定位的基数的位置是可以不具有特殊性的,而且实现了将数据二.
2021-04-05 22:39:22
302
3
原创 C语言中大数的存储问题
在C语言中,常见的数据类型有short,int等数据类型,在进行较小数的存储和表示时是没有问题的,但是当我们想要进行大数的存储和表示时,就会出现数据溢出的问题,以求阶乘为例,使用int型数据的话,到13的阶乘数据就会溢出了,得到的结果为1932053504(使用Codeblocks),很明显是不对的。那么如何解决这个问题呢?这里我们考虑使用的一个关键工具就是数组,基本思想是将阶乘过程中每次得到的数各位上的数分配到数组的各个元素中,如果出现了数组中某个元素在阶乘过程中得到了大于等于10的数,则求其进位,放到
2021-03-21 11:10:46
5951
9
空空如也
HTML<style>中的背景图片为什么显示不出来?
2021-08-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人