![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构(java)
微の夏
这个作者很懒,什么都没留下…
展开
-
索引最小优先队列简单实现(java)
虽然最大优先队列和最小优先队列,他们可以分别快速访问到队列中最大元素和最小元素,但是他们有一 个缺点,就是没有办法通过索引访问已存在于优先队列中的对象,并更新它们。为了实现这个目的,创建一种新的数据结构,索引优先队列。实现思路:步骤一:存储数据时,给每一个数据元素关联一个整数,例如insert(int k,T t),我们可以看做k是t关联的整数,那么我们的实 现需要通过k这个值,快速获取到队列中t这个元素,此时有个k这个值需要具有唯一性。我们可以用一个T[] items数组来保存数据元素,在in原创 2022-04-12 15:30:25 · 182 阅读 · 0 评论 -
优先队列的简单实现(java)
普通的队列是一种先进先出的数据结构,元素先在队列尾追加、而从队列头删除。优先队列按照其作用不同,可以分为以下两种: 最大优先队列: 可以获取并删除队列中最大的值;最小优先队列:可以获取并删除队列中最小的值。最大优先队列api设计:堆这种结构可以方便删除最大的值,所以,我们可以基于堆区实现最大优先队列。package com.yyy;//继承Comparable接口,给每个数据提供比较规则public c...原创 2022-04-12 14:46:32 · 1564 阅读 · 0 评论 -
堆排序(小根堆)的简单实现(java)
实现步骤:1、构造堆;2、得到堆顶元素,这个值就是最大值;3、交换堆顶元素和数组中的最后一个元素,此时所有元素中的最大元素已经被放到合适的位置4、对堆进行调整,重新让除了最后一个元素的的剩余元素中的最大值放到堆顶;5、重复2-4这个步骤,直到堆中剩一个元素为止api设计:...原创 2022-04-10 12:36:38 · 2682 阅读 · 0 评论 -
五、堆的简单实现(java)
堆的特性:1.它是完全二叉树,除了树的最后一层结点不需要是满的,其它的每一层从左到右都是满的,如果最后一层结点不是满的,那么要求左满右不满。2.它通常用数组来实现。3.每个结点都大于等于它的两个子结点。这里要注意堆中仅仅规定了每个结点大于等于它的两个子结点,但这两个子结点的顺序并没有做规定,跟我们之前学习的二叉查找树是有区别的。堆的api设计:...原创 2022-04-08 10:12:54 · 272 阅读 · 0 评论 -
二叉树的基础遍历实现(java)--前序、中序、后序、层序
树状结构和线性结构不一样,它没有办法从头开始依次向后遍历,如果按照根结点什么时候被访问,我们可以把二叉树的遍历分为以下三种方式:1、前序遍历:先访问根结点,再访问左子树,最后访问右子树;2、中序遍历(进行排序的):先访问左子树,中间访问根结点,最后访问右子树3、后序遍历:先访问左子树,再访问右子树,最后访问根结点备注:代码中写用的Queue类,附在文章最后前序遍历的API: //使用前序遍历,把指定树x中的所有键放入到key队列中 private void preErgod原创 2022-04-06 11:16:30 · 2375 阅读 · 0 评论 -
四、二叉查找树的简单实现(java)
二叉树的结点类:二叉树就是一个一个的结点及其之间的关系组成的,按照面向对象的思想,我们设计一个结点类来描述结点这个事物。结点类的API设计:代码实现:package com.yyy;public class Node<Key,Value> { //记录左子结点 private Node left; //记录右子结点 private Node right; //存储键 private Key key; //存储值原创 2022-04-05 11:54:37 · 635 阅读 · 0 评论 -
树的基本特点与相关术语
基本特点:1.每个结点有零个或多个子结点;2.没有父结点的结点为根结点;3.每一个非根结点只有一个父结点;4.每个结点及其后代结点整体上可以看做是一棵树,称为当前结点的父结点的一个子树;相关术语:结点的度:一个结点含有的子树的个数称为该结点的度;叶结点:度为0的结点称为叶结点,也可以叫做终端结点分支结点:度不为0的结点称为分支结点,也可以叫做非终端结点结点的层次:从根结点开始,根结点的层次为1,根的直接后继层次为2,以此类推结点的层序编号:将树中的结点,按照从上层...原创 2022-04-02 14:33:16 · 118 阅读 · 0 评论 -
有序符号表的简单实现java(基于符号表)
代码:package com.yyy;public class OrderSymbolTable<Key extends Comparable<Key>,Value> { //首先定义一个结点类 private class Node{ //键 public Key key; //值 public Value value; //下一个结点 public Node原创 2022-04-02 14:07:33 · 93 阅读 · 0 评论 -
符号表的简单实现
符号表最主要的目的就是将一个键和一个值联系起来,符号表能够存储的数据元素是一个键和一个值共同组成的键值对数据,我们可以根据键来查找对应的值。在符号表中,其键具有唯一性。符号表的API设计:结点类:符号表:...原创 2022-04-02 13:11:24 · 763 阅读 · 0 评论 -
三、队列的简单实现(java)
队列是一种基于先进先出的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据时被先读出来队列的API设计:...原创 2022-04-01 11:30:59 · 80 阅读 · 0 评论 -
用栈解决逆波兰表达式的求值问题
逆波兰表达式(后缀表达式):该表达式是波兰的逻辑学家提出的一种表达式的表达方法,其特点是运算符总是放在跟它相关的操作数之后。主要思路:原创 2022-03-31 11:27:26 · 59 阅读 · 0 评论 -
用栈解决括号匹配问题
主要思路:先拿到所有的字符串,判断是否是左括号,如果是左括号就进栈,是右括号就弹出栈中一个元素,直到最后,判断栈中是否还有元素。代码实现:备注:com.yyy.Stack的代码见本人的+++=====二、栈的简单实现(java)package test;import com.yyy.Stack;public class BracketsMatchTest { public static void main(String[] args) { String str=原创 2022-03-31 10:03:56 · 992 阅读 · 0 评论 -
二、栈的简单实现(java)
1、栈的含义栈是一种先进后出的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后进入的数据在栈顶,需要读取数据的时候就需要从栈顶弹出数据。我们称数据的进入到栈的过程叫压栈,数据从栈中出去的过程叫弹栈。2、栈的实现(顺序存储--数组、链式存储--链表)2.1栈的API设计2.2代码实现3package com.yyy;import java.util.Iterator;public class Stack<原创 2022-03-30 11:57:37 · 575 阅读 · 0 评论 -
一、线性表
1、快慢指针快慢指针指的是定义两个指针,这两个指针的移动速度一快一慢,以此来制造自己想要的差值,这个差值可以让我们找到链表上相应的节点。一般情况下,快指针的移动步长为慢指针的两倍。1.1中间值问题(利用快慢指针找出链表的中间值)/** * @param first 链表的首节点 * @return 链表的中间节点的值 */ public static String getMid(Node<String> first){ //定原创 2022-01-21 15:46:00 · 388 阅读 · 0 评论