![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
柴可拉夫斯基
这个作者很懒,什么都没留下…
展开
-
数据结构——Trie
Trie什么是Trie字典树的基础三级目录什么是Trie字典树的基础三级目录原创 2021-10-05 22:49:05 · 129 阅读 · 0 评论 -
堆的实现(java)
堆堆的基础表示数据的存储规则用数组存储堆中的数据MaxHeap基本方法的实现三级目录堆的基础表示数据的存储规则堆结构类似与二叉树(此处用最大堆举例),不同的是堆只用满足左右孩子均小于该节点值即可,由此,堆是一个完全二叉树(一层一层按顺序摆放数据)用数组存储堆中的数据由于堆中的数据存储方法满足完全二叉树(相当于顺序存储),故可以用数组顺序存储数据(从1开始)由于后续删除、添加元素需要寻找节点的父亲节点、左孩子、右孩子,根据图示,易得出规律MaxHeap基本方法的实现public cla原创 2021-10-03 22:54:58 · 379 阅读 · 0 评论 -
二分搜索树中的递归
二叉树递归思想add 方法递归思想递归可以看成“递” 和“归”的过程,重点讨论“递”到低,需要“归”的这一特殊结点的情况,大致可以把整个递归函数分为一下几部分:递归函数{“递”停止条件“归”的过程(返回计算好的值)}重点在于:1)找出“递”的终止条件2)找出“归”的规律整个计算过程可以看作重复有限次相同的动作得出的结果从1到100累加public class Main { public static int Sum(int x) { //x==1即为“递”的终止条原创 2021-05-30 13:44:34 · 357 阅读 · 0 评论 -
BST中的Comparable
comparable的源代码:package java.lang;import java.util.*;package java.lang;public interface Comparable<T> { public int compareTo(T o);}哪个变量继承了Comparable接口,它们之间就可以用compareTo()进行比较,同时也适用于泛型。public class BST <E extends Comparable <E>>原创 2021-05-27 21:55:07 · 76 阅读 · 0 评论 -
二叉树添加元素
通过递归方法向二叉树中添加元素:先创建一个public的add方法,使用户可以调用add方法,传入需要添加的值//向二分搜索树添加一个新元素 public void add(E e) { root=add(root,e); }再创建一个private的add方法,进行递归寻找插入点传入add就对结点node进行一次判断:判断结点node是否为空,若空,就创建新结点与之相连并返回结点再根据传入数字的大小判断向左还是向右移动private Node add(Nod原创 2021-05-25 11:58:46 · 1381 阅读 · 0 评论 -
链表的递归
以leetcode203移除链表元素为例核心思想:将问题可以拆分为无数个相同解决方法,重复这个解决方法一定的次数,即可解决问题例public class Solution { public ListNode removeElements(ListNode head, int val) { if(head==null) return null; ListNode res=removeElements(head.next,val); return head.va原创 2021-05-21 14:50:07 · 179 阅读 · 0 评论 -
创建对象时使用this
相当于从当前传入位置开始创建对象并执行(类似于传址)//链表中的toString函数@Override public String toString() { StringBuilder res=new StringBuilder(); ListNode cur=this;//从传入位置开始输出 while(cur!=null) { res.append(cur.val+"->");原创 2021-05-21 13:45:30 · 170 阅读 · 0 评论 -
static的应用
static方法可以理解为:方便在没有创建对象的情况下来进行调用(方法/变量)。相当于不用创建包含该方法的对象就可以直接访问例://递归求和public class Sum { public static int sum(int[] arr) { return sum(arr,0); } private static int sum(int[] arr,int l) { if(l==arr.length) return原创 2021-05-21 13:07:15 · 55 阅读 · 0 评论 -
链表实现队
为链表创建头,头结点头节点出队,尾结点入队入队:注意讨论链表是否为空。若为空,需使head=tail,此时头指针才不会为空其余情况只需创建新节点,使其与尾结点相连,原来的尾指针后移即可tail=new Node(e,tail.next);语句是错误的此语句未将tail.next与newNode链接,链是断的,不能形成一条链public void enqueue(E e){ if(tail==null) { tail=new Node(e); head=原创 2021-05-20 17:36:14 · 71 阅读 · 0 评论 -
删除链表中的元素(无头)
删除链表中的索引为index的元素,相当于将index前的结点与index后相连,注意:判断index是否越界结点prev的起始位置(起点为dummyHead,从0开始移动index-1次方便写for循环)链接完成后ret指空,完善程序代码public E remove(int index) { if(index<0||index>size) { throw new IllegalArgumentException("Remove failed.Ind原创 2021-05-20 11:54:50 · 70 阅读 · 0 评论 -
链表的遍历,查询和修改
1)与添加元素时prev的起始位置dummyHead不同,cur的起始位置是dummyHead.next,目的是方便遍历(for循环中的遍历次数不变) //在链表中间添加元素 public void add(int index,E e) { if(index<0||index>size) { throw new IllegalArgumentException("Add failed.Index illegal."); } if(in原创 2021-05-18 22:03:35 · 206 阅读 · 0 评论 -
循环队列编写的注意事项
/*循环队列的核心思想:1)预留一个空间,区分队列为0和队列已满的情况2)注意出队和入队时,front,tail后移的写法(%data.length),来实现循环*/public class LoopQueue<E> implements Queue<E>{ private E[] data; private int front,tail; private int size; public LoopQueue(int capacity) { data=(E原创 2021-05-18 20:59:58 · 241 阅读 · 0 评论 -
编写链表(有头)的注意事项
package LinkedList;public class LinkedList有头<E> { private class Node{//用户不需要访问节点的内部结构,故用private public E e; public Node next;//区别于C,Java直接创建一个新的Node作为next //Node构造函数 public Node(E e,Node next) { this.e=e; this.n原创 2021-05-17 20:18:11 · 78 阅读 · 0 评论 -
链表(无头)的编写思路
引入原因:有头链表中,单纯的用add方法不能解决向链表头添加节点的情况。故人为地为链表头部添加一个dummyHead来解决此问题(即消除了添加节点位置前端无节点的情况代码package LinkedList;public class LinkedList无头<E> { private class Node{//用户不需要访问节点的内部结构,故用private public E e; public Node next;//区别于C,Java直接创建一个新的Nod原创 2021-05-17 20:16:57 · 89 阅读 · 0 评论 -
Java中toString方法的自动调用
Java中使用System.out.println()方法时,直接传入对象名,会自动以toString形式输出例栈的输入输出ArrayStack<Integer> stack=new ArrayStack<>(); for(int i=0;i<5;i++) { stack.push(i); System.out.println(stack);结果:...原创 2021-05-15 15:29:48 · 302 阅读 · 0 评论 -
使用this关键字引用构造方法
在无参的构造方法内部,可使用this来调用另一个有参构造方法内部的方法例 //构造函数,传入数组容量capacity并构造Array public Array(int capacity) { data=(E[])new Object[capacity]; size=0; } //无参数情况 public Array() { this(10);//调用上一个有参的构造函数,相当于输入的capacity为10 }当一个类内部的构造方法比较多时,原创 2021-05-15 12:59:57 · 597 阅读 · 0 评论 -
StringBuilder中的append和String.format()的使用
StringBuilder由于String对象本身是不可变的,运用StringBuilder即是为了能够改变String中的内容String.format()Java中的String.format()类似于C语言中的sprintf,可用于自定义想要输出字符串的格式例查询数组中的元素//查询元素 @Override public String toString() { StringBuilder res=new StringBuilder(); res.appe原创 2021-05-15 11:32:37 · 945 阅读 · 1 评论 -
==和equals的区别
==== 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型就是比较内存地址。equals()1.是一个方法,而非运算符2.只能适用于引用数据类型简而言之,==用于基本变量间的值比较,equals用于比较对象值间是否相等而用==对对象进行比较实际比较的是它们间的地址是否相等例数组中使用泛型后它们之间的值比较//查找数组中是否有元素e public boolean contains(E e) { for(int i=0;i<size原创 2021-05-14 15:58:33 · 87 阅读 · 0 评论 -
My Car
#include<iostream>#include<windows.h>constexpr auto FULL_GAS = 85;using std::cin; using std::cout; using std::endl; using std::string;class Car{public: string color; string engine; int gas_tank=0; int wheel=0; void setColor(string c原创 2021-03-17 21:00:25 · 107 阅读 · 0 评论