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

数据结构与算法笔记:树、链表、排序与队列实现

数据结构与算法笔记:树、链表、排序与队列实现

目录

  • 数据结构与算法笔记:树、链表、排序与队列实现
    • 🌲 二叉树(Binary Tree)
      • TreeNode 类定义
      • 二叉树前序遍历(递归)
      • 二叉树搜索(查找目标值节点)
    • 🔗 单链表(Linked List)
      • ListNode 节点类
      • LinkedList 类实现
    • 🔄 队列(Queue) - 链式实现
      • QueueNode 节点类
      • LinkedQueue 类实现
    • 11111栈(Stack) - 数组实现1111
      • ArrayStack 类实现(补充完整版)
    • 📊 排序算法总结
    • 🔁 排序算法实现
      • 选择排序(Selection Sort)
      • 归并排序(Merge Sort)
    • ✅ 总结

本文基于手写笔记整理,涵盖二叉树遍历、搜索、链表、栈、队列以及常见排序算法的Java实现。适合初学者快速掌握核心数据结构和算法逻辑。


🌲 二叉树(Binary Tree)

TreeNode 类定义

classTreeNode{intval;TreeNodeleft;TreeNoderight;publicTreeNode(intval){this.val=val;}}

二叉树前序遍历(递归)

publicstaticvoidorder(TreeNodenode){if(node==null)return;order(node.left);System.out.print(node.val+" ");order(node.right);}

⚠️ 注意:此处为中序遍历,代码顺序应为left -> root -> right。若需前序则应为root -> left -> right。

二叉树搜索(查找目标值节点)

publicstaticTreeNodesearch(TreeNodenode,inttarget){if(node==null)returnnull;if(node.val==target)returnnode;TreeNodeleft=search(node.left,target);if(left!=null)returnleft;returnsearch(node.right,target);}

🔗 单链表(Linked List)

ListNode 节点类

classListNode{intval;ListNodenext;publicListNode(intval){this.val=val;}}

LinkedList 类实现

publicclassLinkedList{privateListNodehead;publicvoidaddFirst(intval){ListNodenewNode=newListNode(val);newNode.next=head;head=newNode;}publicvoidprint(){ListNodecur=head;while(cur!=null){System.out.print(cur.val+" ");cur=cur.next;}System.out.println();}}

🔄 队列(Queue) - 链式实现

QueueNode 节点类

classQueueNode{intval;QueueNodenext;publicQueueNode(intval){this.val=val;this.next=null;}}

LinkedQueue 类实现

publicclassLinkedQueue{privateQueueNodefront;privateQueueNoderear;publicLinkedQueue(){this.front=null;this.rear=null;}publicbooleanisEmpty(){returnfront==null;}publicvoidenqueue(intval){QueueNodenewNode=newQueueNode(val);if(isEmpty()){front=rear=newNode;}else{rear.next=newNode;rear=newNode;}}publicintdequeue(){if(isEmpty()){System.out.println("队列空");return-1;}intval=front.val;front=front.next;if(front==null){rear=null;}returnval;}}

11111栈(Stack) - 数组实现1111

ArrayStack 类实现(补充完整版)

publicclassArrayStack{privateint[]data;privateinttop;privateintcapacity;publicArrayStack(intsize){this.capacity=size;this.data=newint[capacity];this.top=-1;}publicbooleanisEmpty(){returntop==-1;}publicvoidpush(intval){if(top>=capacity-1){System.out.println("栈满");return;}data[++top]=val;}publicintpop(){if(isEmpty()){System.out.println("栈空");return-1;}returndata[top--];}publicintpeek(){if(isEmpty()){System.out.println("栈空");return-1;}returndata[top];}}

📊 排序算法总结

算法时间复杂度空间复杂度特点
快排O(n log n)O(log n)原地排序,不稳定
直接插入O(n²)O(1)稳定,小规模高效
选择排序O(n²)O(1)不稳定,交换次数少
归并排序O(n log n)O(n)稳定,适合链表
冒泡排序O(n²)O(1)稳定,效率低

💡 补充说明:

  • n个结点的完全二叉树:有n+1个空指针域
  • 第k层最多:2^(k-1) 个结点
  • 叶子结点数:≤ 总结点数 / 2
  • 度为2的结点数= 叶子结点数 - 1
  • 满二叉树:所有层都填满
  • 完全二叉树:除最后一层外,其余层全满

🔁 排序算法实现

选择排序(Selection Sort)

publicvoidselectionSort(int[]arr){for(inti=0;i<arr.length-1;i++){intminIndex=i;for(intj=i+1;j<arr.length;j++){if(arr[j]<arr[minIndex]){minIndex=j;}}swap(arr,i,minIndex);}}privatevoidswap(int[]arr,inti,intj){inttemp=arr[i];arr[i]=arr[j];arr[j]=temp;}

归并排序(Merge Sort)

publicvoidmergeSort(int[]arr,intleft,intright){if(left>=right)return;intmid=(left+right)/2;mergeSort(arr,left,mid);mergeSort(arr,mid+1,right);merge(arr,left,mid,right);}privatevoidmerge(int[]arr,intl,intm,intr){int[]temp=newint[r-l+1];inti=l,j=m+1,k=0;while(i<=m&&j<=r){temp[k++]=arr[i]<=arr[j]?arr[i++]:arr[j++];}while(i<=m)temp[k++]=arr[i++];while(j<=r)temp[k++]=arr[j++];System.arraycopy(temp,0,arr,l,temp.length);}

✅ 总结

本笔记系统梳理了以下内容:

  1. 二叉树基本操作:遍历与搜索
  2. 单链表:增删查打印
  3. 队列与栈:链式与数组实现
  4. 经典排序算法:选择、归并
  5. 复杂度分析:时间与空间对比

📝 建议结合代码调试运行,加深对递归、指针、内存管理的理解。


📌学习建议:

  • 手写代码 → 理解逻辑 → 调试验证 → 优化改进
  • 掌握基础后可拓展:BST、AVL、堆、哈希表等

👉 欢迎关注我,持续分享算法与数据结构干货!


本文由手写笔记整理而成,欢迎点赞收藏,一起进步!

http://www.cnnetsun.cn/news/174267.html

相关文章:

  • Open-AutoGLM vs JMeter:性能测试如何选择?3大维度全面解析
  • Open-AutoGLM 与 BrowserStack 兼容性对比(稀缺内部数据首次公开)
  • Open-AutoGLM与Sauce Labs兼容性深度剖析:90%团队忽略的4个核心参数
  • 【前端自动化测试避坑指南】:Open-AutoGLM与Cypress在移动端的真实表现对比
  • 【AI测试工具新标杆】:Open-AutoGLM如何以0.1ms响应精度碾压Ranorex?
  • Open-AutoGLM 与 Playwright 到底怎么选?:3大核心维度全面测评,90%的人都忽略了这一点
  • 【顶级测试架构师亲授】:Open-AutoGLM对接Sauce Labs的7步完美适配法
  • 大数据时代MongoDB的性能瓶颈与解决办法
  • 【Open-AutoGLM vs Applitools】:谁才是视觉测试的终极王者?
  • 【专家亲测】Open-AutoGLM与UiPath操作复杂度全面拆解(含学习曲线数据)
  • Open-AutoGLM vs WinAutomation:高并发场景下谁更稳定?(实测结果曝光)
  • 为什么你的自动化项目失败了?Open-AutoGLM与Power Automate适配性全剖析
  • Thinkphp和Laravel框架社区物业车位缴费房屋充电桩管理系统 论文
  • 你真的了解Open-AutoGLM与Katalon Studio的适配边界吗?
  • 【测试工程师必看】Open-AutoGLM与Katalon Studio适配差异的5大关键点
  • 【自动化平台选型避坑指南】:Open-AutoGLM与Power Automate 6大场景实测对比
  • Vue3+TypeScript+Element-Plus确认对话框ElMessageBox.confirm
  • 企业流程自动化怎么选,Open-AutoGLM和Power Automate到底差在哪?
  • 为什么99%的人没发挥Open-AutoGLM全部潜力?,解锁隐藏的动态权重调优功能
  • 批量打印神器,太流批了
  • 【Java毕设全套源码+文档】基于springboot的大学生兼职平台设计与实现(丰富项目+远程调试+讲解+定制)
  • 从零开始学昇腾Ascend C算子开发-第四篇:常用算子实现
  • 学术迷航中的“智能罗盘”:书匠策AI如何重塑本科硕士论文写作新范式
  • 为什么90%的企业都在用Open-AutoGLM做客户信息归档?真相曝光
  • Open-AutoGLM实时跟进系统搭建全流程(含源码级避坑指南)
  • 【AI驱动销售革命】:Open-AutoGLM如何实现线索筛选效率提升10倍
  • 告别加班写年报!Open-AutoGLM自动写作系统实测效果曝光(附对比数据)
  • Open-AutoGLM数据同步实战指南(从配置到监控全链路拆解)
  • 【Open-AutoGLM邮件分类实战】:手把手教你构建企业级智能筛选系统
  • Java全栈工程师面试实录:从基础到实战的深度探讨