当前位置: 首页 > ops >正文

【0.3 漫画数据结构与算法】

📚 漫画数据结构与算法

🎯 学习目标:掌握计算机科学基础的数据结构与算法,为后续技术学习打下坚实基础


🏗️ 第一章:线性数据结构篇

📋 数组与动态数组

📋 数组特性解析:内存布局:
┌─────────────────────────────────────────┐
│ 数组在内存中的连续存储                  │
│ ┌─────┬─────┬─────┬─────┬─────┬─────┐ │
│ │ [0] │ [1] │ [2] │ [3] │ [4] │ [5] │ │
│ │ 10  │ 20  │ 30  │ 40  │ 50  │ 60  │ │
│ └─────┴─────┴─────┴─────┴─────┴─────┘ │
│   ↑                                    │
│ 基址                                   │
│                                        │
│ 访问公式:address = base + index * size │
└─────────────────────────────────────────┘时间复杂度:
• 访问:O(1) - 随机访问
• 查找:O(n) - 线性查找
• 插入:O(n) - 需要移动元素
• 删除:O(n) - 需要移动元素

🎨 Java实现示例:

// 动态数组实现
public class DynamicArray<T> {private Object[] array;private int size;private int capacity;public DynamicArray() {this.capacity = 10;this.array = new Object[capacity];this.size = 0;}// 扩容操作private void resize() {capacity *= 2;Object[] newArray = new Object[capacity];System.arraycopy(array, 0, newArray, 0, size);array = newArray;}// 添加元素public void add(T element) {if (size >= capacity) {resize();}array[size++] = element;}// 插入元素public void insert(int index, T element) {if (index < 0 || index > size) {throw new IndexOutOfBoundsException();}if (size >= capacity) {resize();}// 移动元素for (int i = size; i > index; i--) {array[i] = array[i - 1];}array[index] = element;size++;}// 删除元素public T remove(int index) {if (index < 0 || index >= size) {throw new IndexOutOfBoundsException();}@SuppressWarnings("unchecked")T removed = (T) array[index];// 移动元素for (int i = index; i < size - 1; i++) {array[i] = array[i + 1];}size--;return removed;}
}

🔗 链表结构

🔗 链表类型对比:单向链表:
┌─────┬─────┐   ┌─────┬─────┐   ┌─────┬──────┐
│Data │Next │──→│Data │Next │──→│Data │ null │
└─────┴─────┘   └─────┴─────┘   └─────┴──────┘Head                            Tail双向链表:┌─────┬─────┬─────┐   ┌─────┬─────┬─────┐
null←│Prev │Data │Next │←→│Prev │Data │Next │→null└─────┴─────┴─────┘   └─────┴─────┴─────┘Head                    Tail循环链表:
┌─────┬─────┐   ┌─────┬─────┐   ┌─────┬─────┐
│Data │Next │──→│Data │Next │──→│Data │Next │
└─────┴─────┘   └─────┴─────┘   └─────┴─────┘↑                               │└───────────────────────────────┘

🎨 链表实现:

// 单向链表实现
public class LinkedList<T> {private Node<T> head;private int size;private static class Node<T> {T data;Node<T> next;Node(T data) {this.data = data;}}// 头部插入public void addFirst(T data) {Node<T> newNode = new Node<>(data);newNode.next = head;head = newNode;size++;}// 尾部插入public void addLast(T data) {Node<T> newNode = new Node<>(data);if (head == null) {head = newNode;} else {Node<T> current = head;while (current.next != null) {current = current.next;}current.next = newNode;}size++;}// 删除节点public boolean remove(T data) {if (head == null) return false;if (head.data.equals(data)) {head = head.next;size--;return true;}Node<T> current = head;while (current.next != null) {if (current.next.data.equals(data)) {current.next = current.next.next;size--;return true;}current = current.next;}return false;}
}

📚 栈与队列

📚 栈和队列对比:栈 (Stack) - LIFO(后进先出):
│   ┌─────┐ ←── top     │ push/pop操作
│   │  3  │             │
│   ├─────┤             │
│   │  2  │             │
│   ├─────┤             │
│   │  1  │             │
│   └─────┘             │队列 (Queue) - FIFO(先进先出):enqueue          dequeue↓                ↑
┌─────┬─────┬─────┬─────┐
│  1  │  2  │  3  │  4  │
└─────┴─────┴─────┴─────┘rear              front优先队列 (Priority Queue):
┌─────────────────────────────────────────┐
│ 基于堆实现的优先队列                    │
│        1(优先级最高)                    │
│      /   \                              │
│     3     2                             │
│   /  \   /                              │
│  7    4 5                               │
│                                         │
│ 特点:每次出队都是优先级最高的元素       │
└─────────────────────────────────────────┘

🌳 第二章:树形数据结构篇

🌲 二叉树与二叉搜索树

// 二叉搜索树实现
public class BinarySearchTree<T extends Comparable<
http://www.xdnf.cn/news/14083.html

相关文章:

  • SNMP中BER编码解析
  • 微信小程序使用画布实现飘落泡泡功能
  • NLP学习路线图(四十八): NLTK
  • ​​实时人脸检测与人脸关键点识别系统实现
  • linux开机原理以及如何开关机-linux023
  • 同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——B
  • 深入剖析 Celery:分布式异步任务处理的利器
  • 项目会议过多如何优化沟通效率
  • [论文阅读] 人工智能 | Gen-n-Val:利用代理技术革新计算机视觉数据生成
  • uni-app项目实战笔记6--同一组件使用Props传递不同的值
  • springMVC-13 文件下载及上传
  • 英伟达诉求1亿IOPS SSD:打破AI算力存储瓶颈
  • 从技术视角解析星黎语音交互机器人的创新与行业影响
  • 分布式定时任务系列12:XXL-job的任务触发为什么是死循环?
  • IPv4详解
  • FWFW - Find Websites From World
  • Vue3中v-bind=“$attrs“用法讲解
  • el-table跨页多选和序号连续
  • Burn 开源程序是下一代深度学习框架,在灵活性、效率和可移植性方面毫不妥协
  • 使用Docker安装FFmpeg
  • 【Jmeter】Jmeter 高并发性能压力测试
  • 融智学教育观及其数学公式体系凝练汇总
  • 儿童智能玩具与传统玩具的区别
  • 倍思Nomos多合一桌面充:第六代氮化镓快充技术加持,性能全面提升
  • 【动手学深度学习】3.4. softmax回归
  • 鸿蒙开发-视频学习及实用中的一些小结
  • pytorch实战波斯顿房价回归模型
  • LINE 接入说明
  • 解决麒麟国产操作系统,分辨率下拉框是空白问题。
  • dsp28335