数据结构与算法基础(一)

article/2025/11/10 20:33:01

大家好 我是makasa
这个栏目呢,我会按照我之前通过视频学习的一个笔记来记录.
同时,通过写这几篇blog来巩固一下我的基础

数据结构与算法,顾名思义,分为两个部分:数据结构、算法。那它们各自具体概述是什么呢。让我们看以下两个图,简单明了。这里大概了解以下即可。
在这里插入图片描述
在这里插入图片描述
下面我们重点来讲以下线性结构。
首先线性结构分为:
1.以顺序存储方式存储的线性结构:
①数组(最大可取到长度-1、数组长度不可变)
如何解决数组长度不可变:创建一个新数组,长度为原数组+1(添加)或者-1(删除)
②栈:(先进后出)例:子弹夹
③队列(先进先出)例:排队买票
2.以链表存储方式存储的线性结构:

①单链表:
在这里插入图片描述
②循环链表
在这里插入图片描述
③双链表
在这里插入图片描述

然后,在这里呢,我们重点提一下数组里面的查找算法
查找算法包括:
①线性查找:即定义一个数组、进行遍历,查找元素和数组元素相等即可
二分查找(效率高):应用面不广,因为要求目标数组有序.

下面贴一下数组的代码(增删改查)

package cn.makasa;
import java.util.Arrays;public class MyArray {//定义一个数组private int[] elements;//构造方法public MyArray(){elements = new int[0];}//返回数组的长度public int size(){return elements.length;}/***	一、在数组末尾添加一个元素*/public  void  add(int element) {//1.定义一个新的数组:长度为原数组长度+1int[] newArray = new int[elements.length + 1];//2.遍历原数组,把原数组的值赋值给新数组for (int i = 0; i < elements.length; i++) {newArray[i] = elements[i];}//3.在数组末尾添加一个元素:添加元素的下标 等于 原数组的长度 即:		     newArray[elements.length] = element;//4.把新数组赋值给原数组elements = newArray;}/***	二、打印所有元素显示在控制台*/public void show(){System.out.println(Arrays.toString(elements));}/***	三、删除数组中的元素*/public void delete(int index){//1.判断下标是否越界if (index< 0 || index > elements.length-1){throw new RuntimeException("下标越界");}//2.定义一个新数组 长度为原数组的长度-1int[] newArray = new int[elements.length-1];//3。遍历新数组,如果在删除元素之前的元素 :直接赋值 若在删除元素之后的元素:值加1for (int i = 0;i<newArray.length;i++){if(i<index){newArray[i] = elements[i];}else {newArray[i] = elements[i+1];}}//4.把新数组赋值给旧数组elements = newArray;}/***  四、得到每一个元素*/public int get(int index){return elements[index];}/***  五、插入一个元素到指定位置*/public void insert(int index,int element){//1.定义一个新数组 长度为原数组的长度+1int[] newArr = new int[elements.length+1];//2.遍历原数组,判断 如果i<index 直接赋值 如果新数组for(int i = 0;i<elements.length;i++){if (i<index){newArr[i] = elements[i];}else {newArr[i+1] = elements[i];}}newArr[index] = element;//替换原数组elements = newArr;}//替换指定位置的元素public void set(int index,int element){elements[index] = element;}/***  六、线性查找*/public int search(int target) {for(int i =0;i<elements.length;i++){if(elements[i] == target){return i;}}return -1;}/***  七、二分查找*/public int binarySearch(int target){int begin = 0;int end = elements.length-1;int mid = (begin+end)/2;int index = -1;while (true){//什么情况下没有这个元素?//如果开始在结束位置之后或者重合,没有这个元素if(begin>=end){return -1;}if(elements[mid] == target){return mid;}else {if (elements[mid]>target){end=mid-1;}else {begin = mid+1;}mid = (begin+end)/2;}}}
}

测试类:

package makasaTest;import cn.makasa.MyArray;public class testArray {public static void main(String[] args) {//创建数组对象MyArray ma = new MyArray();//获取数组长度int size = ma.size();System.out.println("原数组长度为"+size);//显示所有元素ma.show();//添加元素ma.add(9);ma.add(8);ma.add(7);ma.show();//删除某个元素ma.delete(1);ma.show();System.out.println(ma.get(1));System.out.println("==============");//插入一个元素ma.insert(0,100);ma.show();//修改元素ma.set(2,100);ma.show();}
}

输出结果:

原数组长度为0
[]
[9, 8, 7]
[9, 7]
7

============
[100, 9, 7]
[100, 9, 100]


http://chatgpt.dhexx.cn/article/OJy5yfEA.shtml

相关文章

【算法】算法基础

文章目录 1. 字符串1.1LeetCode151 Reverse Words in a String1.2LeetCode557 Reverse Words in a String III1.3统计字符串字母&#xff0c;数字&#xff0c;空格和其他字符个数1.4把字符串转换成整数1.5回文字符串 2.整数2.1LeetCode7 Reverse Integer2.2判断一个数是不是质数…

算法基础---基础算法

文章目录 快速排序归并排序二分 整数二分浮点数二分高精度 高精度加法高精度减法高精度乘法高精度除法前缀和 一维前缀和二维前缀和差分 一维差分二维差分双指针位运算离散化区间合并 一、快速排序 思想&#xff1a;1.首先确定一个分界点&#xff08;随机取任意一点为…

算法基础知识总结(基础算法)

算法基础知识总结 Efficient procedures for solving problems on large inputs. 一、基础算法 1、快速排序 1、类别&#xff1a;快速排序是一种 交换排序&#xff0c;冒泡排序也是一种交换排序。 2、原理&#xff1a;将未排序的元素根据一个作为基准的主元&#xff08;Pi…

算法基础知识

一、算法的定义 算法&#xff1a;对特定问题求解步骤的一种描述&#xff0c;是为解决一个或一类问题给出的一个确定的、有限长的操作序列。 二、算法与程序的区别与联系 区别&#xff1a; 程序&#xff1a;与某种编程语言有关&#xff0c;能直接在机器上运行。 算法&#xff1a…

算法基础简介

一、什么是算法 在数学领域&#xff0c;算法是为了解决某一类问题的公式和思想。 在计算机领域&#xff0c;本质是一些计算机指令&#xff0c;解决特定运算和逻辑问题。 算法的掌握程度&#xff0c;一方面可以检验程序员对计算机底层的了解&#xff0c;一方面也…

Unity 移动的几种方法(从某一点移动到另外一点)

对于unity的几种移动方法,在以下给出整理 1 方向*速度 2 vector.lerp 与目标点永远不会重合 3 vector.MoveTowards 会与目标点重合 4 translate方法 纯移动 5 WASD键盘方法 刚 体方法 7.鼠标方法 捕鱼达人 8.射线方法(指哪到哪) Controll…

Unity 控制物体移动

目录 1、通过改变物体的位置使物体移动 2、通过给物体施加力使物体移动 3、移动characterController以及碰撞检测 一、相关代码展示 1、通过改变物体的位置使物体移动 using System.Collections; using System.Collections.Generic; using UnityEngine;public class move …

unity3D人物移动的实现(一)

人物的移动&#xff0c;首先要考虑人物与地面的碰撞&#xff0c;碰撞发生的条件是&#xff0c;两者必须都为碰撞体&#xff0c;且至少有一方为刚体&#xff0c;为了方便&#xff0c;我们就给人物加上刚体属性和碰撞体。 1首先是碰撞体属性&#xff0c;人形使用胶囊碰撞体&#…

Unity让物体跟随鼠标移动

前言 最近在学习Unity&#xff0c;记录下学习的成果吧。本文最终结果是要实现一个小飞机跟随鼠标移动的效果。看下图片。 向量 在Unity中&#xff0c;每个对象都有自己的位置属性&#xff0c;组件叫做Transform,通过Transform可以获取对象的位置属性。在上面的实例中&#…

01_Unity常用的移动方法

文章目录 基础框架匀速移动变速移动自定义变速运动总结&#xff1a; 在制作一款游戏的时候&#xff0c;经常需要对物体的位置进行移动&#xff0c;我们希望这个移动是具有多样性的&#xff0c;并且可操作的。 C#中提供了非常丰富的移动代码工具&#xff0c;通过这些工具我们可以…

Unity点击物体后,移动到物体所在位置

Unity点击物体后&#xff0c;移动到物体所在位置 方法一&#xff1a;OnMouse检测&#xff08;需要Collider组件&#xff09; 脚本挂在被点击的物体上 using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement;/// <summary> /// 缺点…

Unity2D教程:人物移动

关注专栏&#xff0c;持续更新哦 教程总目录 按键 自带的Input有GetAxisRaw来获取按下按键后所对应的值&#xff0c;Input.GetAxisRaw(“Horizontal”)在按下D或右箭头返回1&#xff0c;A或左箭头返回-1&#xff1b;Input.GetAxisRaw(“Vertical”)同理。 Input.GetAxis会根…

Unity物体跟随鼠标移动

刚开始在将鼠标点转换为世界坐标时&#xff0c;我以为可以直接使用Unity的Camera.main.ScreenToWorldPoint( Input.mousePosition ) 就完事了&#xff0c;事实证明我想的太简单了。在我们使用这个API将鼠标屏幕点&#xff08;Screen&#xff09;转换成世界坐标&#xff08;Worl…

Unity中物体移动方法详解

一&#xff1a;Transform ——transform.Translate&#xff1a;不会考虑到碰撞transform.Translate(Vector3 targetPos&#xff0c;指定参照坐标系(默认为Space.Self)) ——transform.position&#xff1a;直接改变物体的坐标 二&#xff1a;刚体 ——MovePosition ——veloc…

【Unity】如何优雅地移动物体-8个方法

在游戏开发中&#xff0c;如何移动物体&#xff1f;是我们需要思考的事情。 Unity 引擎也提供了众多的方法&#xff0c;每个开发者的使用习惯也各不相同&#xff0c;所以往往不是很清楚在这种场景下哪种方式最好的或者最有效的。 那么&#xff0c;这篇文章&#xff0c;我想分享…

详解Unity的几种移动方式实现

前言 最近在学习如何制作 FPS 游戏&#xff0c;学习了如何使用角色控制器来控制角色的移动跳跃等等&#xff0c;结合之前学到的使用 transform&#xff0c;刚体等使物体移动&#xff0c;不同的移动方式适用于不同的场景&#xff0c;今天就来简要盘点一下各种移动方式以及其优劣…

unity物体四种移动方法总结

目录 一.通过修改位置来实现移动 二.通过物理系统实现位移 三.通过输入控制物体移动 一.通过修改位置来实现移动 利用修改Transform组件的position的两种常用方法。 1.使用Translate&#xff08;&#xff09;函数。 2.&#xff0c;直接指定新的位置 将上述两种方法在void …

详解Unity的移动控制实现

前言 上一篇写了数种Unity中的移动方式&#xff0c;有物理移动&#xff0c;有非物理移动等&#xff0c;这篇我们来谈谈Unity中的移动控制方式&#xff0c;来结合上一篇所说的方法&#xff0c;用起来。一般控制是通过获取用户输入来处理角色移动逻辑的&#xff0c;而用户输入的…

JSON数据和解析

JSON> JavaScript Object Notation JSON是一个字符串 常常用于网络传输数据的一种字符 json数据是一种轻量级的数据交换格式&#xff0c;它基于一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语…

Android开发之JSON数据解析详解(一)

&#xfeff;&#xfeff; 今天很高兴和大家一起学习Android的JSON数据解析,可能对于学习安卓的朋友都知道JSON在数据解析方面已经很普遍了.所以也是我们必定要了解的知识 ,下面让我们了解一下JSON的发展历程. XML——这种用于表示客户端与服务器间数据交换有效负载的格式&am…