数据结构笔记

数据结构笔记

基本数据结构

数组
int[] array = new int[5];

可变数组
List array = new ArrayList<>();

链表
class ListNode {
int val; // 节点值
ListNode next; // 后继节点引用
ListNode(int x) { val = x; }
}
// 实例化节点
ListNode n1 = new ListNode(4);
// 构建引用指向
n1.next = n2;


注意:通常情况下,不推荐使用 Java 的 Vector 以及其子类 Stack ,而一般将 LinkedList 作为栈来使用
LinkedList stack = new LinkedList<>();

stack.addLast(1); // 元素 1 入栈
stack.addLast(2); // 元素 2 入栈
stack.removeLast(); // 出栈 -> 元素 2
stack.removeLast(); // 出栈 -> 元素 1


class TreeNode {
int val; // 节点值
TreeNode left; // 左子节点
TreeNode right; // 右子节点
TreeNode(int x) { val = x; }
}
// 初始化节点
TreeNode n1 = new TreeNode(3);
// 构建引用指向
n1.left = n2;


图是一种非线性数据结构,由「节点(顶点)vertex」和「边 edge」组成,每条边连接一对顶点。根据边的方向有无,图可分为「有向图」和「无向图」。本文 以无向图为例 开展介绍。

顶点集合: vertices = {1, 2, 3, 4, 5}
边集合: edges = {(1, 2), (1, 3), (1, 4), (1, 5), (2, 4), (3, 5), (4, 5)}
邻接表: 使用数组 vertices存储顶点,邻接表 edges 存储边。edges 为一个二维容器,第一维 i 代表顶点索引,第二维 edges[i] ,存储此顶点对应的边集和;例如 edges[0] = [1, 2, 3, 4]代表 vertices[0] 的边集合为 [1, 2, 3, 4] 。

散列表
散列表是一种非线性数据结构,通过利用 Hash 函数将指定的「键 key」映射至对应的「值 value」,以实现高效的元素查找。
// 初始化散列表
Map<String, Integer> dic = new HashMap<>();
// 添加 key -> value 键值对
dic.put(“小力”, 10001);
// 从姓名查找学号
dic.get(“小力”); // -> 10001


堆是一种基于「完全二叉树」的数据结构,可使用数组实现。以堆为原理的排序算法称为「堆排序」,基于堆实现的数据结构为「优先队列」。堆分为「大顶堆」和「小顶堆」,大(小)顶堆:任意节点的值不大于(小于)其父节点的值。
// 初始化小顶堆
Queue heap = new PriorityQueue<>();
// 元素入堆
heap.add(1);
// 元素出堆(从小到大)
heap.poll(); // -> 1

注意点
在 Python 和 Java 等语言中,字符串都被设计成「不可变」的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现。

注意点

1.在 Python 和 Java 等语言中,字符串都被设计成「不可变」的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现。
2.python: return “”.join(res)
java: return res.toString();
3.Java 数组长度不可变,因此使用 List 先存储,再转为数组并返回
4.==是判断两个人是不是住在同一个地址,而equals是判断同一个地址里住的人是不是同一个
5.字符串切割:s.substring(n, s.length()) s.substring(0, n)
6.可变字符串对象 StringBuilder res = new StringBuilder();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值