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

【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<

相关文章:

  • Sngine 4.0.4海外社交平台PHP源码 – 多语言支持短视频和博客订阅(源码下载)
  • pdb/sdf转pdbqt错误、pdbqt小分子文件对接蛋白质dock分数为0
  • [Linux入门] Linux磁盘管理与文件系统
  • Heterogeneous Graph Transformer (WWW 2020)译文
  • Spring学习笔记
  • Java并发编程实战 Day 22:高性能无锁编程技术
  • RT-Thread Studio SDK管理器安装资源包失败
  • uniapp打包安卓和ios
  • 初学STM32编程技巧全功能按键非阻塞式实现
  • Amazon Q in QuickSight 实战:自然语言秒级生成数据报表与深度洞察
  • HTML+CSS 登陆框动态切换
  • 学习Oracle------认识VARCHAR2
  • 量化面试绿皮书:13. 贴错标签的袋子
  • pikachu靶场通关笔记31 文件包含02之远程文件包含
  • 中医穴位学习工具推荐,专业经络穴位图解
  • 【AS32系列MCU调试教程】调试工具:Eclipse调试工具栏与窗口的深入分析
  • 【模板】埃拉托色尼筛法(埃氏筛)
  • 【Linux系统编程】线程概念
  • Java 常用类 Math:从基础到高阶应用指南
  • EffRes-DrowsyNet:结合 EfficientNetB0 与 ResNet50 的新型混合深度学习模型用于驾驶员疲劳检测算法实现
  • 十大免费自助建站/长沙网站seo
  • 施工企业市场经营工作思路及措施/游戏优化是什么意思?
  • 衡水企业网站建设/流量神器
  • vs sql server网站开发/舆情视频
  • 网站建设浏览器不兼容/搜索引擎技术优化
  • wordpress 显示页面标题/搜索引擎优化方法