营销型网站建设价格是多少,东莞网站建设公司百推,为wordpress安装iis rewrite 组件与配置方法,网站建设销售找客户话术Java数据结构与算法基础(二)递归算法Java数据结构与算法基础(一)概述与线性结构学习目的#xff1a;为了能更顺畅的读很多底层API代码和拓宽解决问题的思路一、数据结构概述1.数据结构是什么#xff1f;数据与数据之间的关系2.数据结构的分类#xff1a;存储结构分类#x…Java数据结构与算法基础(二)递归算法Java数据结构与算法基础(一)概述与线性结构学习目的为了能更顺畅的读很多底层API代码和拓宽解决问题的思路一、数据结构概述1.数据结构是什么数据与数据之间的关系2.数据结构的分类存储结构分类顺序结构和链式结构逻辑结构分类线性结构(除了首位元素其他元素都存在前一元素和后一元素)、集合结构(集合)、树形结构(树结构、文件夹、文件结构)、图形结构(多对多结构)二、算法概述1.算法特性输入(0或多个输入)、输出(一个输出)、有穷性(能出结果)、确定性(一一对应)、可行性(能解决问题)2.算法的基本要求正确性、可读性、健壮性、时间复杂度、空间复杂度3.没有最好的算法只有最适合的算法三、线性结构1.数组的基本概念与操作① 存储结构顺序方式存储② 访问方式数组名[下标]最大下标 arr.length-1;③ 元素默认值 0赋值数组名[下标] value;2.数组创建的时候就要指定长度(即数组长度不可变)问题如何解决数组长度不可变如在数组末尾添加元素解决① 建一个新数组长度 oldArr.length1;② 复制旧数组元素到新数组新数组的末尾元素 新元素;③ oldArr newArr3.数组元素的删除(先告诉我删哪个元素)① 建一个新数组长度 oldArr.length-1;② 复制旧数组元素newArr[i] oldArr[i]; // inewArr[i] oldArr[i1]; // in③ oldArr newArr;4.面向对象的数组属性(一个私有的数组)方法(操作私有属性数组的方法)要点① 长度变化就意味着要建新数组替代旧数组② 传入下标的方法首先都应该判断数组越界的问题5.(数组)查找算法线性查找依次对比元素找到相同元素即break二分法查找① 先排序再查找public static int binarySearch(int [] arr, int target){if (arr null) {return -1;}int begin 0;int end arr.length-1;int mid ((end - begin) 1) begin;while(begin end){if (arr[mid] target) {return mid;}if(arr[mid] target){end mid-1;}else if(arr[mid] target){begin mid1;}mid ((end - begin) 1) begin;}return -1;}6.栈先进后出数组实现入栈(建新数组复制元素新元素放到新数组最后新数组替换对象旧数组属性)、出栈(建新数组复制元素取出最后一个元素新数组替换对象中的旧数组属性返回旧数组的最后一个元素)、查看栈元素(不涉及数组长度变化所以直接返回旧数组的索引对应的值即可)7.队列先进先出数组实现入队、出队、队列是否为空(套路建新数组主要涉及长度、复制元素、替换旧数组操作)8.单链表存储形式链式存储(存当前节点同时存下个节点的位置[最后一个节点除外])Java中单链表的结构Node:int data;Node next;public Node(int data){this.data data;}涉及的操作通过第一个节点进行追加操作① 获取当前节点Node currentNode this;② while(true){获取下一个节点Node next currentNode.next;如果下个节点为null即最后一个节点break;否则currentNode next;}③ 追加节点到末尾currentNode.next node;//入参的Node④ 返回当前节点 return this;判断当前节点是否是最后一个节点判断当前节点的下一个节点是否为空即可☆ 删除单链表的节点取不到上个节点信息(这是问题)所以只能删除下个节点信息① 取到下下个节点② 将下下个节点赋值给当前节点的下个节点显示所有节点信息① 打印当前节点信息② currentNode currentNode.next;如果currentNode null; break;否则重复①~②插入新节点① tempNode currentNode.next;//作为下下个节点② currentNode.next node; //node 为新节点③ node.next tempNode;9.循环链表结构单链表的尾节点的下个节点是头结点LoopNode{int data;LoopNode next this;//默认自身是个循环链表下个节点为其自身插入节点操作和单链表相同}10.双向循环链表结构包含上个节点信息、下个节点信息、当前节点内容DoubleNode{DoubleNode pre this;DoubleNode next this;int data;}主要操作新增节点