数据结构与算法-数组基础

xbhog 2021-01-21 12:08:09
算法 数据结构 数组 数据 结构


数组基础:

导读:

开始放寒假,准备开一篇数据结构与算法的汇总,记录这枯燥的寒假学习;

话不多说,先从数组搞起;

希望能坚持下去!

数组的基本使用:

首先对于数组,我们需要知道它基础的规则与运用;

public static void main(String[] args) {
// 创建一个数组
int[] num = new int[3];
// 获取数组长度
int length1 = num.length;
System.out.println("数组长度:"+length1);
// 为数组中的元素赋值
num[0]=99;
num[1]=98;
num[2]=97;
// 遍历数组
for (int i=0;i<length1;i++){
System.out.printf("数组元素[%d]:%d",i,num[i]);
}
System.out.println();
// 创建数组的时候直接赋值
int[] arr = {99,98,97,22};
System.out.println("arr lenght:"+arr.length);
}

数组的元素添加:

当了解基础的数组知识时,我们需要在数组的添加、删除、插入、查询上下功夫;

public static void main(String[] args) {
// 解决数组长度不可变的问题
int[] arr = {9,8,7};
// 快速查看数组中的元素
System.out.println(Arrays.toString(arr));
// 要加入的元素
int dst = 6;
// 创建一个新的数组,长度是原来数组长度+1
int[] newArr = new int[arr.length+1];
// 把原来数组中的数据全部添加到新的数组中
for(int i=0;i<arr.length;i++){
newArr[i] = arr[i];
}
System.out.println(Arrays.toString(newArr));
// 把目标元素放入新数组的最后
newArr[arr.length] = dst;
// 新数组替换原来数组
arr = newArr;
System.out.println(Arrays.toString(arr));
}

数组的元素删除:

public static void main(String[] args) {
// 目标数组
int[] arr = {9,8,7,6,5,4};
// 要删除数组的下标
int dst = 0;
System.out.println(Arrays.toString(arr));
// 创建一个新的数组,长度为原来数组长度-1
int[] newarr = new int[arr.length-1];
// 赋值原数组出来要删除的那个元素以外其他的元素
for(int i=0;i<newarr.length;i++){
// 要删除的元素之前的元素
if(i<dst){
newarr[i] = arr[i];
}else{
// 要删除的元素之后的元素
newarr[i] = arr[i+1];
}
}
// 新数组替换旧数组
arr = newarr;
System.out.println(Arrays.toString(arr));
}

数组的元素插入:

public static void main(String[] args) {
// 目标数组
int[] arr = {1,3,2,4,5,8};
System.out.println(Arrays.toString(arr));
// 需要插入元素的位置
int dst = 2;
// 插入新的元素
int data = 99;
// 新的数组
int[] newarr = new int [arr.length+1];
for (int i=0;i<arr.length;i++){
if (i <dst){
newarr[i] = arr[i];
}else{
newarr[i+1] = arr[i];
}
}
newarr[dst] = data;
arr = newarr;
System.out.println(Arrays.toString(arr));
}

以上实例没有做过多的解释,如果有Java基础的话,还是很好理解的;

针对以上学习的知识,我们实现一个简易版的增删改查;

数组升级版:

构造函数部分:

package JavaDataStructure.arrayUpgrade;
import java.util.Arrays;
public class MyArray {
private int[] array;
// 初始化数组
public MyArray() {
array = new int[0];
}
// 获取数组长度方法
public int getLength(){
return array.length;
}
// 查看数组信息
public void show(){
System.out.println(Arrays.toString(array));
}
// 向数组末尾添加数据
public void add(int data){
// 申请一个新的数组,长度比原数组长度+1
int[] newarr = new int[array.length+1];
// 将原数组中的数据全部保存到新的数组中
for(int i=0;i<array.length;i++){
newarr[i] = array[i];
}
// 将添加的数据加到新数组的最后,原数组的长度大小刚好时最后一个数据的位置
newarr[array.length] = data;
array = newarr;
}
// 查找数组中的元素下标
public int search(int data){
int index=-1;
for (int i=0;i<array.length;i++){
if(array[i]==data){
index=i;
}
}
return index;
}
// 删除数组中的数据
public void delete(int data){
int index=search(data);
// 检查数组是否有数据
if(index<0 || index>array.length-1){
// 异常提醒
throw new RuntimeException("下标越界!");
}
// 申请一个新的数组
int[] newarr = new int[array.length-1];
for (int i=0;i<newarr.length;i++){
if (i<index){
newarr[i] = array[i];
}else{
// 想要删除元素的后面元素
newarr[i] = array[i+1];
}
}
// 新数组替换旧数组
array = newarr;
}
public void insert(int index,int data){
int[] newarr = new int[array.length+1];
// 将原数组中的元素放入新数组中
for (int i=0;i<array.length;i++){
// 将插入下标之前的元素放入新数组中
if (i<index){
newarr[i] = array[i];
}else{
// 将插入下标之后的元素放入新数组,放之前需要留出一个位置
newarr[i+1] = array[i];
}
}
// 插入新元素
newarr[index] = data;
// 新数组替代旧数组
array = newarr;
}
// 替换元素
public void set(int index,int data){
if(index<0 || index >array.length){
throw new RuntimeException("下标越界!");
}
array[index-1] = data;
}
}

测试函数部分:

package JavaDataStructure.arrayUpgrade;
import JavaDataStructure.arrayUpgrade.MyArray;
public class TestMyarray {
public static void main(String[] args) {
// 实例化数组对象
MyArray ma = new MyArray();
// 向数组末尾添加数据
ma.add(3);
ma.add(2);
ma.add(11);
// 显示数组中的元素
ma.show();
// 显示查找元素的下标
// System.out.println(ma.search(4));
// 显示当前数组大小
System.out.println(ma.getLength());
// 删除操作
ma.delete(2);
ma.show();
// 插入操作
ma.insert(0,4);
ma.insert(2,42);
ma.show();
// 替换指定位置的元素
ma.set(4,33);
ma.show();
}
}

结束:

每天进步一点点,希望各位有所收获.....

版权声明
本文为[xbhog]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/xbhog/p/14306988.html

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云