没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论














Java 数据结构与算法笔记
2021.10
目录
Java
数据结构与算法笔记
.............................................................................................................................................................................. 1
1
数据结构与算法介绍
.................................................................................................................................................................................. 2
2
稀疏数组
...................................................................................................................................................................................................... 2
3
环形队列(数组)
...................................................................................................................................................................................... 3
4
单链表
.......................................................................................................................................................................................................... 4
5
双向链表
...................................................................................................................................................................................................... 7
6
单向环形链表、约瑟夫问题
...................................................................................................................................................................... 9
7
栈及其应用
................................................................................................................................................................................................ 12
8
逆波兰表达式(后缀表达式)
................................................................................................................................................................ 14
9
中缀表达式转后缀表达式
........................................................................................................................................................................ 15
10
递归实现迷宫问题
.................................................................................................................................................................................. 18
11
递归八皇后问题
...................................................................................................................................................................................... 19
12
冒泡排序及其优化
.................................................................................................................................................................................. 20
14
插入排序
.................................................................................................................................................................................................. 21
16
快速排序
.................................................................................................................................................................................................. 23
18
基数排序(桶排序)
.............................................................................................................................................................................. 26
19
排序算法总结
.......................................................................................................................................................................................... 27
20
线性查找(顺序查找)
.......................................................................................................................................................................... 28
21
二分查找(折半查找):
...................................................................................................................................................................... 28
22
斐波那契查找(黄金分割法):
.......................................................................................................................................................... 29
23
哈希表
...................................................................................................................................................................................................... 30
24
二叉树遍历
.............................................................................................................................................................................................. 33
25
二叉树查找
.............................................................................................................................................................................................. 34
26
二叉树的删除
.......................................................................................................................................................................................... 34
27
顺序存储二叉树
...................................................................................................................................................................................... 39
28
线索二叉树及遍历
.................................................................................................................................................................................. 39
29
堆排序
...................................................................................................................................................................................................... 42
30
赫夫曼树(最优二叉树)
...................................................................................................................................................................... 43
31
赫夫曼编码(
Huffman Coding
)
...........................................................................................................................................................44
32
二叉排序树(
BST
)
...............................................................................................................................................................................49
33
平衡二叉树(
AVL
数)
.........................................................................................................................................................................52
34
多路查找树
.............................................................................................................................................................................................. 54
35
图
.............................................................................................................................................................................................................. 55
36
分治算法
.................................................................................................................................................................................................. 55
37
动态规划算法
.......................................................................................................................................................................................... 55
38 KMP
算法和暴力匹配算法
..................................................................................................................................................................... 57
39
贪心算法
.................................................................................................................................................................................................. 58
40
普里姆(
Prim
)算法和最小生成树(
MST Minimum Cost Spanning Tree
)
.................................................................................... 60
41
克鲁斯卡尔(
Kruskal
)算法
................................................................................................................................................................. 61
42
迪杰斯特拉(
Dijkstra
)算法
-
最短路径问题
........................................................................................................................................65
43
弗洛伊德(
Floyd
)算法
-
最短路径问题
............................................................................................................................................... 67

学习网站 https://www.bilibili.com/video/BV1E4411H73v?spm_id_from=333.999.0.0
1 数据结构与算法介绍
数据结构是一门研究组织数据方式的学科,数据结构可以编写效率更高的代码
程序=数据结构+算法
2 稀疏数组
1) 二维数组转稀疏数组
1
遍历二维数组,得到有效数据的个数 sum
2
根据 sum 就可以创建稀疏数组 spareArr int[sum+1][3]
3
将二维数组的有效数据存入到稀疏数组
2) 稀疏数组转二维数组
1
先读稀疏数组第一行,根据第一行的数据,创建原始的二维数组
2
再读取稀疏数组后几行数据,并赋给原始的二维数组即可
3) 实现代码:
public class SparseArray {
public static void main(String[] args) {
int[][] arr=new int[11][11];
arr[1][2]=1;
arr[2][3]=2;
int sum=0;
System.out.println("————————————————
原始数组
————————————————");
show(arr);
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
if(arr[i][j]!=0){sum++;}
}
}
int[][] sparseArr=new int[sum+1][3];
sparseArr[0][0]=arr.length;
sparseArr[0][1]=arr[0].length;
sparseArr[0][2]=sum;
int count=1;
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
if(arr[i][j]!=0){
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=arr[i][j];
count++;
}
}
}
System.out.println("————————————————
稀疏数组
————————————————");
show(sparseArr);
int[][] oldArr=new int[sparseArr[0][0]][sparseArr[0][1]];
for(int i=1;i<sparseArr.length;i++){
oldArr[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];

}
System.out.println("————————————————还原后————————————————");
show(oldArr);
}
public static void show(int[][] arr){
for (int[] row:arr) {
for(int col:row){
System.out.print(col+"\t");
}
System.out.println();
}
}
}
运行结果:
————————————————原始数组————————————————
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
————————————————稀疏数组————————————————
11 11 2
1 2 1
2 3 2
————————————————还原后————————————————
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
3 环形队列(数组)
1) 实现思路:
front 指向队列的第一个元素,arr[front]表示队列的第一个元素,front 的初始值为 0
rear指向队列的最后一个元素的后一位置,希望空出一个空间作为约定,rear 的初始值为 0
当队列满时:(rear+1)%maxSize==front
当队列为空时:rear==front
队列中有效的数据个数为:(rear+maxSize-front)%maxSize
2) 代码实现:
class CircleArray{
private int maxSize;
private int front;
private int rear;
private int[] arr;
public CircleArray(int arrmaxSize){
maxSize=arrmaxSize;
arr=new int[arrmaxSize];

}
public boolean isFull(){
return (rear+1)%maxSize==front;
}
public boolean isEmpty(){
return rear==front;
}
public void add(int n){
if(isFull()){
System.out.println("队列满了,不能添加...");
return;
}
arr[rear]=n;
rear=(rear+1)%maxSize;
}
public int get(){
if(isEmpty()){
throw new RuntimeException("队列为空,不能取数据...");
}
int value=arr[front];
front=(front+1)%maxSize;
return value;
}
public void show(){
if(isEmpty()){
System.out.println("队列为空,不能取数据...");
return ;
}
for(int i=front;i<front+size();i++){
System.out.printf("arr[%d]=%d\n",i%maxSize,arr[i%maxSize]);
}
}
public int size(){
return (rear-front+maxSize)%maxSize; //+maxSize 保证取余不能为负数情况
}
public int head(){
if (isEmpty()){
throw new RuntimeException("队列为空,不能取头部数据...");
}
return arr[front];
}
}
4 单链表
1) 创建(添加)
先创建一个 head 头结点,表示单链表的头
后面没添加一个节点,就直接加入到链表的最后
2) 遍历
通过一个辅助变量,来遍历
3) 按照编号顺序添加

首先找到新添加的节点的位置,通过辅助变量
新的节点.next=temp.next
将 temp.next=新的节点
4) 删除节点
首先找到需要删除节点的前一个节点 temp
temp.next=temp.next.next
被删除的节点将不会有其它引用指向,会被垃圾回收机制回收
5) 实现代码:
class Node{
public int no;
public String data;
public Node next; //指向下一个节点
public Node(int no, String data) {
this.no = no;
this.data = data;
}
@Override
public String toString() {
return "Node{" + "no=" + no + ", data='" + data + '\'' + '}';
}
}
class SingleLink{
private Node head=new Node(0,"");
//不考虑节点的编号顺序时
public void add(Node node){
Node temp=head;
//遍历,找到链表的最后
while(true){
if(temp.next==null){
break;
}else{
temp=temp.next;
}
}
temp.next= node;
}
public void addByOrder(Node node){
Node temp=head;
boolean flag=false; //标识编号是否存在
while(true){
if( temp.next==null){
break;
}
if(temp.next.no>node.no){
break;
}else if(temp.next.no==node.no){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
System.out.println("添加的数据已存在,不能加入");
}else{
node.next=temp.next;
temp.next=node;
}
}
public void updata(Node newNode){
if(head.next==null){
System.out.println("链表为空");
return;
剩余68页未读,继续阅读
资源评论


王丶小利
- 粉丝: 25
- 资源: 3
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- PLC实验4-水塔水位控制模拟实验-实验手册的梯形图例程(基于STEP 7-MicroWIN SMART软件)
- STK 12.7 用户手册
- 深度学习之图像分类Transformer in Transformer(TNT)网络详解.docx
- 论文笔记RRU-Net The Ringed Residual U-Net for Image .docx
- CN-DS-N32A455 Series Datasheet V0.9.2.pdf
- 超分辨率综述.docx
- TNTTransformer in transformer论文精读.docx
- SpringData JPA笔记.docx
- Semantic-Agnostic Feature Learning Network with Auxiliary.docx
- PSCC-Net Progressive Spatio-Channel Correlation Network .docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
