数据结构总结——Java

news/2024/11/15 2:18:19/

1 链表(Linked List)

1.1 单项链表(Singly Linked List)

1.1.1 图例

1.1.2 Java实现

public class ListNode {// 保存值int val;// 保存指针ListNode next;// 构造函数们public ListNode() {}public ListNode(int val) {this.val = val;}public ListNode(int val, ListNode next) {this.val = val;this.next = next;}// 重写toString方法方便输出@Overridepublic String toString() {return "ListNode{" +"val=" + val +", next=" + next +'}';}
}

1.1.3 常见方法

1) 测试类,创建单项链表并输出

public class ListNodeTest {public static void main(String[] args) {// 创建节点ListNode node1 = new ListNode(1);ListNode node2 = new ListNode(2);ListNode node3 = new ListNode(3);// 连起来node1.next = node2;node2.next = node3;node3.next = null;// 创建head指向链表头ListNode head;head = node1;System.out.println(head);}
}// 输出:ListNode{val=1, next=ListNode{val=2, next=ListNode{val=3, next=null}}}

1.2 双向链表(Doubly Linked List)

1.2.1 图例

1.2.2 Java实现

public class Node {Node prev;int data;Node next;public Node() {}public Node(int data) {this.data = data;}public Node(Node prev, int data, Node next) {this.prev = prev;this.data = data;this.next = next;}@Overridepublic String toString() {return "Node{" +"prev=" + prev +", data=" + data +", next=" + next +'}';}
}

1.2.3 常见方法

1) 测试类,创建双向链表并输出

public class NodeTest {public static void main(String[] args) {// 创建节点Node node1 = new Node(null, 1, null);Node node2 = new Node(node1, 2, null);Node node3 = new Node(node2, 3, null);Node node4 = new Node(node3, 4, null);// 连起来node1.next = node2;node2.next = node3;node3.next = node4;// 输出双向链表// 定义临时node指向表头Node tmp = node1;while(tmp != null){System.out.println(tmp.data);tmp = tmp.next;}}
}

1.3 循环链表

2 二叉树(Binary tree)

2.1 图例

2.2 Java实现

public class TreeNodeTest {public static void main(String[] args) {// 创建二叉树并输出// 创建节点TreeNode root = new TreeNode(null, 1, null);TreeNode left = new TreeNode(null,2, null);TreeNode right = new TreeNode(null, 3, null);// 连接成树root.left = left;root.right = right;// 输出二叉树// 先序遍历 中序遍历 后序遍历}
}

3 栈(Stack FILO:先进后出)

3.1 图例

3.2 Java实现

可以基于数组或链表来构建

public class Stack {// 数据Object[] data;// 当前栈大小int size;// 初始化栈public Stack(int length) {data = new Object[length];}// 入栈public void push(Object ele){if(size >= data.length){throw new RuntimeException("栈已满");}data[size] = ele;size++;}// 出栈public Object pop(){if(size <= 0){throw new RuntimeException("栈已空");}Object obj = data[size - 1];data[size - 1] = null;size--;return obj;}// 遍历输出栈public void output(){for(int i = size-1; i >= 0; i--){System.out.println(data[i]);}}}

3.3 测试类,创建栈并输出

public class StackTest {public static void main(String[] args) {// 初始化栈Stack s = new Stack(3);// 元素入栈s.push('A');s.push('B');s.push('C');// 超过容量
//        s.push('D');// 输出s.output(); // C B A// 元素出栈s.pop();s.pop();// 输出s.output(); // A}
}

4 队列(Queue FIFO:先进先出)

4.1 图例

4.2 Java实现

public class Queue {// 保存数据Object[] values;// 记录存储的元素个数int size;// 构造函数public Queue(int length) {values = new Object[length];}// 向队列中添加元素public void add(Object ele) {if(size >= values.length){throw new RuntimeException("队列已满 添加失败");}values[size] = ele;size++;}// 从队头删除元素public Object get() {if(size <= 0) {throw new RuntimeException("队列已空  获取失败");}// 取队头元素Object obj = values[0];// do somethingfor(int i = 0; i < size-1; i++){values[i] = values[i+1];}// 最后一个元素置空values[size - 1] = null;size--;return obj;}// 输出队列内容public void output() {for(int i = 0; i < size; i++){System.out.println(values[i]);}}
}

4.3 测试类,创建队列并输出

public class Queue {// 保存数据Object[] values;// 记录存储的元素个数int size;// 构造函数public Queue(int length) {values = new Object[length];}// 向队列中添加元素public void add(Object ele) {if(size >= values.length){throw new RuntimeException("队列已满 添加失败");}values[size] = ele;size++;}// 从队头删除元素public Object get() {if(size <= 0) {throw new RuntimeException("队列已空  获取失败");}// 取队头元素Object obj = values[0];// do somethingfor(int i = 0; i < size-1; i++){values[i] = values[i+1];}// 最后一个元素置空values[size - 1] = null;size--;return obj;}// 输出队列内容public void output() {for(int i = 0; i < size; i++){System.out.println(values[i]);}}
}

http://www.ppmy.cn/news/46474.html

相关文章

阿里P7晒工资条,看完好扎心了……

前几天&#xff0c;有位老粉私信我&#xff0c;说看到某95后学弟晒出阿里P7的工资单&#xff0c;他是真酸了…想狠补下技术&#xff0c;努力冲一把大厂。 为了帮到他&#xff0c;也为了大家能在最短的时间内做面试复习&#xff0c;我把软件测试面试系列都汇总在这一篇文章了。 …

神经网络参数初始化方法 | 深度学习

为什么需要初始化神经网络参数&#xff1f; 神经网络参数的初始值会影响网络的拟合能力和优化效果&#xff0c;如果初始值过大或过小&#xff0c;可能会使得模型的梯度爆炸或梯度消失&#xff0c;导致网络无法收敛或训练效率低下。因此&#xff0c;合适的参数初始化可以提高模…

[ARM+Linux] 基于全志h616外设开发笔记

修改用户密码 配置网络 nmcli dev wifi 命令扫描周围WIFI热点 nmcli dev wifi connect xxx password xxx 命令连接WiFi 查看ip地址的指令&#xff1a; ifconfig ip addr show wlan0 SSH登录 这是企业开发调试必用方式&#xff0c;比串口来说不用接线&#xff0c;前提是接入网络…

TCP/UDP协议 (详解)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

Linux宝塔安装msyql服务,默认密码,允许远程登录问题解决

一、首先我在宝塔安装mysql服务是5.7 1.1MySQL数据库5.6之前&#xff08;不包括&#xff09;默认密码为空&#xff0c;用户不用输入密码&#xff0c;直接回车登陆 mysql -uroot -p password:(空) 1.2.MySQL数据库5.6之后&#xff08;包括&#xff09;默认密码是MySQL数据库随机…

2023年税务师事务所行业研究报告

第一章 行业发展概况 1.1 行业概况 税务师事务所是依法设立并承办法律、法规、规章规定的涉税服务和鉴证业务的社会中介机构。税务师事务所的组织形式为有限责任制税务师事务所和合伙制税务师事务所&#xff0c;以及国家税务总局规定的其他形式。税务师事务所应当依法纳税&am…

一分钟了解美国棒球体系·棒球1号位

美国棒球体系是一个庞大且复杂的体系&#xff0c;涵盖了从青少年到职业的各个层次。下面是美国棒球体系的主要组成部分&#xff1a; 1. 青少年棒球&#xff08;Youth Baseball&#xff09; 美国的青少年棒球体系包括各种地区和全国性的联盟&#xff0c;如Little League、Pony…

7个最新的时间序列分析库介绍和代码示例

时间序列分析包括检查随着时间推移收集的数据点&#xff0c;目的是确定可以为未来预测提供信息的模式和趋势。我们已经介绍过很多个时间序列分析库了&#xff0c;但是随着时间推移&#xff0c;新的库和更新也在不断的出现&#xff0c;所以本文将分享8个目前比较常用的&#xff…